首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >G1 (垃圾收集器)什么时候开始运行,它首先在哪个内存区域收集?java 8的新GC更新是什么?

G1 (垃圾收集器)什么时候开始运行,它首先在哪个内存区域收集?java 8的新GC更新是什么?
EN

Stack Overflow用户
提问于 2017-09-22 05:33:20
回答 2查看 1.1K关注 0票数 2

何时将是G1 (垃圾收集器)开始运行,并在中收集第一个的内存区域?java 8的新GC更新是什么?

EN

回答 2

Stack Overflow用户

发布于 2017-09-22 07:28:06

G1 (垃圾收集器)什么时候开始运行?

将-XX:+UseG1GC添加到JVM参数时,将启用G1GC。

G1 (垃圾收集器)什么时候开始运行,它首先在哪个内存区域收集?

请参阅甲骨文教程 on G1GC。

堆被划分成一组大小相等的堆区域,每个区域都是一个连续的虚拟内存范围。某些区域集被分配相同的角色(伊甸园,幸存者,老)

G1执行一个并发的全局标记阶段,以确定整个堆中对象的活性。标记阶段完成后,G1知道哪些区域大部分是空的。它首先聚集在这些地区,通常产生大量的自由空间。这就是为什么这种垃圾收集方法被称为垃圾优先。顾名思义,G1将其收集和压缩活动集中在堆中可能充满可回收对象(即垃圾)的区域。G1使用暂停预测模型满足用户定义的暂停时间目标,并根据指定的暂停时间目标选择要收集的区域数。

G1确定的可回收利用的区域是利用疏散方式收集的垃圾。G1将对象从堆的一个或多个区域复制到堆上的单个区域,并在此过程中压缩和释放内存。这种疏散在多处理器上并行执行,以减少暂停时间和增加吞吐量.因此,通过每次垃圾收集,G1不断地减少碎片,在用户定义的暂停时间内工作。这超出了前面两种方法的能力。

票数 3
EN

Stack Overflow用户

发布于 2017-09-22 06:32:58

当G1发现垃圾收集是必要的时,它就开始收集具有最少活动数据的区域。它通过一个并发标记阶段发现老一代的活对象,并将对象分配给年轻一代,保持将老化对象提升到老一代。JVM在Java堆占用总量超过默认阈值时触发标记阶段。

起始堆占用率(IHOP)是触发初始标记收集的阈值。默认情况下,G1通过观察标记所用的时间以及在老一代中通常分配多少内存来确定最优的IHOP。

Java 8中的New:

  1. G1收集器字符串复制是在Java8中添加的新特性。由于String占用大量堆内存,因此这个新特性使G1收集器能够识别堆空间中多次重复的字符串,并更正它们指向同一个内部char[]数组。
  2. 在Java8垃圾收集中删除PermGen空间和使用MetaSapce是新事物。阅读这个职位获取更多信息。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46357476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档