01 2021 档案

摘要:类加载案例 tomcat类加载器架构 它需要满足以下功能: 部署在同一个Web容器上的两个Web应用程序所使用的Java类库可以实现相互隔离。这是最基本的需求,两个不同的应用程序可能会依赖同一个第三方类库的不同版本,不能要求一个类库在一个服务器中只有一份,服务器应当保证两个应用程序的类库可以互相独立 阅读全文
posted @ 2021-01-21 21:34 王者之剑KO 阅读(124) 评论(0) 推荐(1)
摘要:再次复习,jvm的组成三大部分 内存模型+类加载系统+字节码执行引擎 jvm是以方法作为最基本的执行单元,所以当我们讨论字节码执行引擎的时候,我们讨论的是方法具体如何执行。 运行时栈帧结构 定义: 栈:每个线程都有自己独有的一个空间放自己的局部变量 栈帧:每个线程会为自己的每个方法分配一块对应的内存 阅读全文
posted @ 2021-01-21 21:33 王者之剑KO 阅读(112) 评论(0) 推荐(0)
摘要:类加载 考点 类的加载的生命周期有哪些? 加载过程具体流程?加载触发的时机? 加载过程的Class对象是否唯一还是随创建方法数量而定? 连接过程具体流程?连接触发的时机? 类的静态变量赋值经历的过程? 类的初始化具体流程?初始化触发的时机(何为主动加载/被动加载)? <clinit>方法怎样才会导致 阅读全文
posted @ 2021-01-21 21:30 王者之剑KO 阅读(109) 评论(0) 推荐(0)
摘要:垃圾收集器的分类 为什么会分新生代和老年代回收器的区别? 因为新生代GC触发次数多,垃圾对象回收多,所以要把内存整齐度和效率优先。而老年代内存空间大,垃圾对象少。如果再使用复制算法,需要浪费很多空间。 整堆垃圾收集器 语言描述如下: 串行(Serial)回收器是单线程的一个回收器,简单、易实现、效率 阅读全文
posted @ 2021-01-21 21:29 王者之剑KO 阅读(88) 评论(0) 推荐(0)
摘要:这里所提到的到都是GC涉及到的一些概念,具体不同的收集器由于内存结构不同,并发串行不同,实现上不止下面这些东西 STW GC中Stop the world 即在执行垃圾收集算法时,Java应用程序的其他所有除了垃圾收集收集器线程之外的线程都被挂起。此时,系统只能允许GC线程进行运行,其他线程则会全部 阅读全文
posted @ 2021-01-21 21:28 王者之剑KO 阅读(1743) 评论(0) 推荐(0)
摘要:垃圾收集的核心目标(重点) 这三个问题肯定要会答 哪些内存需要回收 什么时候回收 如何回收 哪些内存需要回收(重点) 程序计数器,虚拟机栈,本地方法栈随线程而生,随线程而灭不需要过多考虑内存回收 Java堆和方法区作为共享区域具有显著的不确定性,其对象的分配和回收都是动态产生的。 什么时候回收(重点 阅读全文
posted @ 2021-01-21 21:27 王者之剑KO 阅读(153) 评论(0) 推荐(0)
摘要:对象的创建过程 new指令过程 跟类的加载其实差不多 检查new指令参数对应的类是否加载,若无则执行类加载 给对象分配内存 将对象的实例变量自动初始化为其变量类型的默认值 初始化对象,给实例变量赋予正确的初始值 检查new指令参数对应的类是否加载,若无则执行类加载 当java虚拟机遇到一条字节码ne 阅读全文
posted @ 2021-01-21 21:25 王者之剑KO 阅读(219) 评论(0) 推荐(0)
摘要:jvm组成 jvm的组成包括 类加载器,字节码执行引擎,内存模型。(并不是只有内存模型) 这图必背 要理解每个区域放的数据是什么 栈:局部变量,栈帧的概念 程序计数器:字节码的行号指示器 本地方法栈:native修饰的方法所需要的内存区域 方法区:类信息、常量、静态变量数据 堆:所有的对象 直接内存 阅读全文
posted @ 2021-01-21 21:24 王者之剑KO 阅读(107) 评论(0) 推荐(0)
摘要:JAVA特点 一门结构严谨,面向对象的编程语言 摆脱了硬件平台的束缚,实现了"一次编写,到处运行"的理想 提供了一种相对安全的内存管理和访问机制 Java运行过程 运行过程: java编译器(编译)->虚拟机(解释执行)->解释器(翻译)->机器码 跨平台性: java源码编译后会生成.class文 阅读全文
posted @ 2021-01-21 21:22 王者之剑KO 阅读(195) 评论(0) 推荐(0)
摘要:CompletableFuture 所有asyn结尾的函数都是指把任务提交给线程池中的线程安排去执行 为什么需要completableFuture 最主要的原因:future.get()是一个阻塞方法,这严重违背了我们使用Future异步的初衷,completableFuture可以注册回调机制 f 阅读全文
posted @ 2021-01-17 15:05 王者之剑KO 阅读(103) 评论(0) 推荐(0)
摘要:Phaser 相位器 功能描述 它与CountDownLatch/cyclicBarrier类似,但是它的功能更加强大 CyclicBarrier,允许一组线程互相等待,直到到达某个公共屏障点。它提供的await()可以实现让所有参与者在临界点到来之前一直处于等待状态。 CountDownLatch 阅读全文
posted @ 2021-01-17 15:04 王者之剑KO 阅读(93) 评论(0) 推荐(0)
摘要:Exchanger 功能描述 两个线程通过exchanger()交换数据 要点描述 参数是传给另一个线程的值,返回值是另一个线程返回给当前线程的值 线程会在exchange的语句wait()住等待另一个线程返回值 必须成对出现,而且无法保证出现的顺序,如果存在落单的exchange线程则会永久进入阻 阅读全文
posted @ 2021-01-17 15:03 王者之剑KO 阅读(107) 评论(0) 推荐(0)
摘要:Atomic类 比volatile要好,它满足了线程安全的三个要求 原子性 可见性 有序性 AtomicInteger AtomicXXX的其他类型都是大同小异 private volatile int value; public final int get() //获取当前的值 public fi 阅读全文
posted @ 2021-01-17 15:02 王者之剑KO 阅读(114) 评论(0) 推荐(0)
摘要:观察者设计模式 核心思想 当被观察者发生变化时主动通知观察者,不需要观察者询问 使用场景 1.监控线程生命周期,线程发现异常时主动通知监控程序 读写锁分离 核心思想 多个线程读和多个线程写同一块数据的情况下,允许多线程同时读,但是有线程在读的时候不允许写操作,只允许一个时刻只有一个线程在写,即读写互 阅读全文
posted @ 2021-01-17 15:01 王者之剑KO 阅读(132) 评论(0) 推荐(0)
摘要:线程组 线程组的作用是:可以批量管理线程或线程组对象,有效地对线程或线程组对象进行组织。 构造函数 ThreadGroup(String name)//默认parent为当前线程组 ThreadGroup(ThreadGroup parent, String name) 具体方法 //评估当前活跃的 阅读全文
posted @ 2021-01-17 15:00 王者之剑KO 阅读(87) 评论(0) 推荐(0)
摘要:创建多个线程 Stream.of("f1","f2").foreach(n->new Thread().start()); 线程休眠 TimeUnit.Second.sleep()//好过Thread.sleep(),可控时间级别,增强可读性 程序中断之后主动调用的钩子函数 可以用于程序中断后释放资 阅读全文
posted @ 2021-01-17 14:59 王者之剑KO 阅读(104) 评论(0) 推荐(0)
摘要:数据同步与共享 多个线程在抢占CPU的时候会出现切换,对共享变量的修改无法保证先后顺序。因此如果存在对共享变量的判断,则需要对其判断和修改进行同步改写。 synchronized同步 使用synchronized所在的代码,相当于加上一层栅栏,就像我们去动物园检票口一样,一开始大家从各个地方来,然后 阅读全文
posted @ 2021-01-17 14:58 王者之剑KO 阅读(106) 评论(0) 推荐(0)
摘要:进程和线程的区别 进程是资源分配的最小单位,线程是CPU调度的最小单位 进程是一个资源的容器,为进程里的所有线程提供共享资源,是对程序的一种静态描述, 线程是计算机最小的调度和运行单位,是对程序的一种动态描述 一静一动,正好组成了完整的程序 线程和进程的区别是什么?​www.zhihu.co 线程的 阅读全文
posted @ 2021-01-17 14:57 王者之剑KO 阅读(154) 评论(0) 推荐(0)