何时将是G1 (垃圾收集器)开始运行,并在中收集第一个的内存区域?java 8的新GC更新是什么?
发布于 2017-09-22 07:28:06
G1 (垃圾收集器)什么时候开始运行?
将-XX:+UseG1GC添加到JVM参数时,将启用G1GC。
G1 (垃圾收集器)什么时候开始运行,它首先在哪个内存区域收集?
请参阅甲骨文教程 on G1GC。
堆被划分成一组大小相等的堆区域,每个区域都是一个连续的虚拟内存范围。某些区域集被分配相同的角色(伊甸园,幸存者,老)
G1执行一个并发的全局标记阶段,以确定整个堆中对象的活性。标记阶段完成后,G1知道哪些区域大部分是空的。它首先聚集在这些地区,通常产生大量的自由空间。这就是为什么这种垃圾收集方法被称为垃圾优先。顾名思义,G1将其收集和压缩活动集中在堆中可能充满可回收对象(即垃圾)的区域。G1使用暂停预测模型满足用户定义的暂停时间目标,并根据指定的暂停时间目标选择要收集的区域数。
G1确定的可回收利用的区域是利用疏散方式收集的垃圾。G1将对象从堆的一个或多个区域复制到堆上的单个区域,并在此过程中压缩和释放内存。这种疏散在多处理器上并行执行,以减少暂停时间和增加吞吐量.因此,通过每次垃圾收集,G1不断地减少碎片,在用户定义的暂停时间内工作。这超出了前面两种方法的能力。
发布于 2017-09-22 06:32:58
当G1发现垃圾收集是必要的时,它就开始收集具有最少活动数据的区域。它通过一个并发标记阶段发现老一代的活对象,并将对象分配给年轻一代,保持将老化对象提升到老一代。JVM在Java堆占用总量超过默认阈值时触发标记阶段。
起始堆占用率(IHOP)是触发初始标记收集的阈值。默认情况下,G1通过观察标记所用的时间以及在老一代中通常分配多少内存来确定最优的IHOP。
Java 8中的New:
https://stackoverflow.com/questions/46357476
复制相似问题