基本概念

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高速运行。
posted @ 2022-07-14 10:48  bavaria  阅读(36)  评论(0)    收藏  举报