基本概念
mutator
修改GC对象间引用关系的线程,即“应用程序”。由Dijkstra提出,mutator实际进行2中操作:1、生成对象2、更新指针
活动对象/非活动对象
活动对象:分配到内存空间中的对象中那些能通过mutator引用的对象成为“活动对象”。非活动对象:分配到堆中那些不能 通过程序引用的对象成为“非活动对象”。也被成为垃圾。
根
是指向对象的指针的“起点”部分,这些都是能通过mutator直接引用的空间。java中的根包括1、虚拟机栈(栈帧的本地变量表)中引用的对象2、方法区中类静态属性引用的对象3、方法区中常量引用的对象4、本地方法栈中JNI引用的对象
并行GC和并发GC
并行GC:先暂停mutator的运行,然后开启多个线程并行地执行GC。并发GC:在不暂停mutator运行的同时,直接开启GC线程并发地执行GC。并行GC的目标是尽量缩短mutator的暂停时间,而并发GC的目标是消除mutator的暂停时间。
评价GC算法性能的4个标准
吞吐量
在单位时间内回收垃圾的能力
最大暂停时间
因执行GC而暂停执行mutator的最长时间
堆使用效率
对象中头信息越少,内存使用效率越高。对象中头信息越多,执行GC的效率越高。堆的使用效率和吞吐量,以及最大暂停时间不可兼得。
访问的局部性
把具有引用关系的对象安排在堆中较近的位置,就能提高在缓存中读取到想利用的数据的概率,领mutator高速运行。