资讯专栏INFORMATION COLUMN

【Java】实战Java虚拟机之三“G1的新生代GC”

BearyChat / 456人阅读

摘要:今天开始实战虚拟机之三的新生代。一旦区被占满,新生代就会启动。新生代收集前后的堆数据如图所示,其中表示区,表示区,表示老年代。当然我们最为关心的依然是的停顿时间以及回收情况。节选自实战虚拟机一书交流群

今天开始实战Java虚拟机之三:“G1的新生代GC”。
总计有5个系列
实战Java虚拟机之一“堆溢出处理”
实战Java虚拟机之二“虚拟机的工作模式”
实战Java虚拟机之三“G1的新生代GC”
实战Java虚拟机之四“禁用System.gc()”
实战Java虚拟机之五“开启JIT编译”

新生代GC的主要工作是回收eden区和survivor区。一旦eden区被占满,新生代GC就会启动。新生代GC收集前后的堆数据如图5.6所示,其中E表示eden区,S表示survivor区,O表示老年代。可以看到,新生代GC只处理eden和survivor区,回收后,所有的eden区都应该被清空,而survivor区会被收集一部分数据,但是应该至少仍然存在一个survivor区,类比其他的新生代收集器,这一点似乎并没有太大变化。另一个重要的变化是老年代的区域增多,因为部分survivor区或者eden区的对象可能会晋升到老年代。

图5.6 G1的新生代GC

新生代GC发生后,如果打开了PrintGCDetails选项,就可以得到类似以下的GC日志(这里只给出了部分日志,完全的日志及其分析请看《实战Java虚拟机》一书第5.4.6节):

0.336: [GC pause (young), 0.0063051 secs]
….
   [Eden: 235.0M(235.0M)->0.0B(229.0M) Survivors: 5120.0K->11.0M Heap: 239.2M(400.0M)->10.5M(400.0M)]
 [Times: user=0.06 sys=0.00, real=0.01 secs]

和其他回收器的日志相比,G1的日志内容非常丰富。当然我们最为关心的依然是GC的停顿时间以及回收情况。从日志中可以看到,eden区原本占用235M空间,回收后被清空,survivor区从5M增长到了11M,这是因为部分对象从eden区复制到survivor区,整个堆合计为400M,从回收前的239M下降到10.5M。

节选自

《实战java虚拟机》一书Q交流群:397196583

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/64347.html

相关文章

  • 实战Java虚拟机之二“虚拟工作模式”

    摘要:今天开始实战虚拟机之二虚拟机的工作模式。总计有个系列实战虚拟机之一堆溢出处理实战虚拟机之二虚拟机的工作模式实战虚拟机之三的新生代实战虚拟机之四禁用实战虚拟机之五开启编译目前的虚拟机支持和两种运行模式。 今天开始实战Java虚拟机之二:虚拟机的工作模式。 总计有5个系列实战Java虚拟机之一堆溢出处理实战Java虚拟机之二虚拟机的工作模式实战Java虚拟机之三G1的新生代GC实战Jav...

    focusj 评论0 收藏0
  • 实战Java虚拟机之一“堆溢出处理”

    摘要:如下文字显示了典型的堆内存溢出一旦发生这类问题,系统就会被迫退出。有关等工具的使用,可以参阅实战虚拟机故障诊断与性能优化第章。除了在发生时可以导出堆信息外,虚拟机还允许在发生错误时执行一个脚本文件。 从今天开始,我会发5个关于java虚拟机的小系列:实战Java虚拟机之一堆溢出处理 [实战Java虚拟机之二虚拟机的工作模式][2] [实战Java虚拟机之三G1的新生代GC][3] 实战...

    Arno 评论0 收藏0
  • 深入理解虚拟机之虚拟机性能监控和故障处理工具

    摘要:监控和故障处理工具显示指定系统内所有的虚拟机进程用于收集虚拟机各方面的运行数据。的常用功能选项测试上面输出了我正在运行程序的包名下的类名虚拟机统计信息监视工具使用于监视虚拟机各种运行状态信息的命令行工具。 《深入理解Java虚拟机:JVM高级特性与最佳实践(第二版》读书笔记与常见面试题总结 本节常见面试题(推荐带着问题阅读,问题答案在文中都有提到): JVM调优的常见命令行工具有哪些?...

    jas0n 评论0 收藏0
  • 深入理解虚拟机之Java内存区域

    摘要:运行时数据区域虚拟机在执行程序的过程中会把它管理的内存划分成若干个不同的数据区域。堆虚拟机所管理的内存中最大的一块,堆是所有线程共享的一块内存区域,在虚拟机启动时创建。 《深入理解Java虚拟机:JVM高级特性与最佳实践(第二版》读书笔记 1 概述 对于Java程序员来说,在虚拟机自动内存管理机制下,不再需要像C/C++程序开发程序员这样为内一个new 操作去写对应的delete/...

    dance 评论0 收藏0
  • 深入理解虚拟机之Java内存区域

    摘要:深入理解虚拟机高级特性与最佳实践第二版读书笔记与常见面试题总结本节常见面试题介绍下内存区域运行时数据区。运行时数据区域虚拟机在执行程序的过程中会把它管理的内存划分成若干个不同的数据区域。 《深入理解Java虚拟机:JVM高级特性与最佳实践(第二版》读书笔记与常见面试题总结 本节常见面试题: 介绍下Java内存区域(运行时数据区)。 对象的访问定位的两种方式。 1 概述 对于Java...

    lavnFan 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<