点击下方“JavaEdge”,选择“设为星标”
第一时间关注技术干货!
免责声明~ 任何文章不要过度深思! 万事万物都经不起审视,因为世上没有同样的成长环境,也没有同样的认知水平,更「没有适用于所有人的解决方案」; 不要急着评判文章列出的观点,只需代入其中,适度审视一番自己即可,能「跳脱出来从外人的角度看看现在的自己处在什么样的阶段」才不为俗人。 怎么想、怎么做,全在乎自己「不断实践中寻找适合自己的大道」
G1,Java8可选,Java9已默认的垃圾收集器,G1 垃圾收集器的关键特性之一是能够在不牺牲吞吐量的同时,限制 GC 暂停时间(即可以设置所需的最大停顿时间)。
调优 JVM 大小和排查问题的情况下,须理解 G1 GC 的日志格式。由于 G1 GC 日志中有许多与子任务相关的信息,因此为了更好地理解和利用这些信息,推荐 GC 日志分析工具:http://gceasy.io/。
可用如下参数打开 GC 日志:
-Xloggc:/home/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps
GC 日志会写入 /home/gc.log 文件。
Minor GC时,产生的GC 日志文件内容:
表示 GC 发生时间,其中20197.284 表示 Java 进程启动 20197284ms后发生 GC。
疏散停顿(Evacuation Pause):将存活对象从一个区域(young or young + old)拷贝到另一个区域的阶段。
这是个 YGC 事件。
表示 GC 的工作线程是 4 个。
显示堆的大小变化:
Eden空间是2016.0M,并且2016.0M空间全被占用。在GC后,年轻代(young generation)空间下降到0,Eden空间增长到2016.0M,但是没有提交。因为要求,额外的空间被添加给Eden。
GC 前,幸存者空间是 0 字节,但GC 后,幸存者空间增长到64.0M,表明对象从年轻代(Young Generation)提升到幸存者空间(Survivor space)。
堆的大小是4096.0M,被占用2048.0M,GC 后,堆占用率降至62.3M,即(2048.0M – 62.3M)的对象被垃圾回收了,堆大小仍是4096.0M。
real 表示 GC 总共花 0.08s。
对
user
和sys
感兴趣,查看:GC LOGGING – USER, SYS, REAL – WHICH TIME TO USE? & GANDHI。
Full GC 时,产生的GC日志文件内容:
Full GC 事件,触发的原因是因为空间分配失败(allocation failure),当堆中有很多碎片时,在老年代进行直接内存分配也许会失败,即使有许多空闲空间,这通常会导致分配失败。
堆的大小变化,由于这是 Full GC 事件:
表示伊甸园空间(Eden space)是194mb,被占用3072kb。在 GC 发生之后,年轻代(young generation)下降到0。伊甸园空间增长到201mb,但是没有提交。因为要求,额外的空间被添加给伊甸园。
表示 GC 发生前后,幸存者空间是 0kb。
表示堆的大小是 4022mb,其中 3727.1mb 空间未被占用。在 GC 发生之后,堆占用率降至 3612mb,115.1mb (即3727.1 – 3612) 的对象被垃圾回收了,堆的大小仍然是 4022mb。
表示在 GC 发生前后,它被占用的空间大小是 2776k。基本上,意味着在这个阶段 metaspace 空间占用率是保持一致的,metaspace 的总大小是 1056768k。
real
表示 GC 总共花了 9.74 秒,这个停顿时间很长。
参考:
关注我,紧跟本系列专栏文章,咱们下篇再续!
作者简介:魔都架构师,多家大厂后端一线研发经验,在分布式系统设计、数据平台架构和AI应用开发等领域都有丰富实践经验。 各大技术社区头部专家博主。具有丰富的引领团队经验,深厚业务架构和解决方案的积累。 负责:
目前主攻市级软件项目设计、构建服务全社会的应用系统。
编程严选网:
http://www.javaedge.cn/
专注分享软件开发全生态相关技术文章
、视频教程
资源、热点资讯等,全站资源免费学习,快来看看吧~
欢迎长按图片加好友
,我会第一时间和你分享软件行业趋势
,面试资源
,学习方法
等等。