并行收集器

(新生代)

ParNew(并行)收集器:使用多线程进行垃圾回收,在垃圾收集时,会Stop-the-World .

阅读全文 »

引用分类

有人引用这块空间那么不是垃圾,没人引用那么就属于垃圾。

强引用:类似于Object a = new A() 这样的,不会被回收。

阅读全文 »

指令重排原理和规则

指令重排:指的是JVM为了优化,在条件允许的情况下,对指令进行一定的重新排列,直接运行当前能够立即执行的后续指令,避开获取下一条指令所需的数据造成的等待。

阅读全文 »

操作数栈

操作数栈:用来存放方法运行期间,各个指令操作的数据。

  1. 操作数栈中元素的数据类型必须和字节码指令的顺序严格匹配
  2. 虚拟机在实现栈帧的时候可能会做一些优化,让两个栈帧出现部分重叠区域,以存放公用的数据
阅读全文 »

栈帧和局部变量表

  1. 字节码执行引擎

    栈帧、运行期操作数栈和局部变量表之间的交换关系

    方法调用、静态分派和动态分派

阅读全文 »

类加载和类加载器

类加载、连接和初始化

理解类从加载、连接、初始化到卸载的生命周期

理解类加载、类加载器、理解双亲委派模型

理解并掌握各种主动使用类的初始化时机

阅读全文 »

类的主动初始化

类的初始化时机

❤:Java程序对类的使用方式分成:主动使用和被动使用,JVM必须在每个类或接口“首次主动使用”时才初始化它们;被动使用类不会导致类的初始化,主动使用的情况:

阅读全文 »

ZGC收集器

ZGC收集器:JDK11加入的具有实验性质的低延迟收集器

ZGC的设计目标:支持TB级内存容量,暂停时间低(< 10ms),对整个程序吞吐量的影响小于15%

ZGC里面的技术:着色指针 和 读屏障

阅读全文 »

跨代引用

跨代应用:也就是一个代中的对象引用另一个代中的对象。

跨代引用假说:跨代引用相对于同代应用来说只是极少数

阅读全文 »

锁优化

自旋锁与自适应自旋:

自旋:如果线程可以很快获得锁,那么可以不在OS层挂起线程,而是让线程做几个忙循环,那么就是自旋

自适应自旋:自旋的时间不再固定,而是由前一次在同一个锁上的自旋时间和锁的拥有者状态来决定

阅读全文 »