oceanbase-3分钟带你看懂 GC 日志!

news/2024/11/18 22:18:59/文章来源:https://www.cnblogs.com/bayaim/p/18387985

3分钟带你看懂 GC 日志!

------------------------------------------------------------------------------------

 

01、背景介绍

在之前的几篇文章中,我们介绍了 JVM 内部布局、对象的创建过程、运行期的相关优化手段、垃圾对象的回收算法以及垃圾收集器等相关知识。

那么如何分析当前虚拟机性能呢?其中 GC 日志起到至关重要的作用。

实际上,每种垃圾收集器都有它独立的日志格式,尽管如此,虚拟机为了方便用户阅读,将各个收集器的日志都维持在一定的共性状态。

下面我们一起来看看不同的垃圾收集器,相关的 GC 日志内容。

本文是基于 JDK 1.8 版本运行,可能不同的版本各个内存区域的名称略有不同,对知识的理解不会产生明显的误区。

02、触发GC时机

通常,GC 触发的条件有两种:

  • 1.程序调用System.gc时可能会触发,此时会建议 JVM 进行垃圾回收,但不代表一定会进行 GC 动作;
  • 2.系统自身来决定 GC 触发的时机,比如年轻代空间不足、老年代空间不足等就会主动触发 GC 动作

以上两种行为都会产生 GC 日志。

03、GC日志

在介绍之前,我们先看一段代码,下文的 GC 日志都会基于这段代码来分析。

 

运行时加上-verbose:gc参数,以便简要的查看程序的 GC 情况,运行后的输出结果如下!

 

以上代码是一段对象相互引用的场景,但是 JVM 还是将对象回收了,也应证了一点,HotSpot 虚拟机并不是通过引用计数法来判定对象是否存活的。

下面我们还是以上面的代码为例,设置不同的虚拟机参数,看看 GC 日志情况。

3.1、Serial 和 Serial Old 组合垃圾收集器

Serial 和 Serial Old 组合的垃圾收集器,可以在运行时设置如下参数来开启。

运行之后,输出结果如下!

 

各个参数描述介绍:

  • def new generation:表示年轻代的内存使用情况,其中eden space表示Eden空间的内存使用情况;from space表示From Survivor空间的内存使用情况;to space表示To Survivor空间的内存使用情况;
  • tenured generation:表示老年代的内存使用情况
  • Metaspace:表示元空间的内存使用情况,在 JDK1.7 中称为永久代

3.2、ParNew 和 Serial Old 组合垃圾收集器

ParNew 和 Serial Old 组合的垃圾收集器,可以在运行时设置如下参数来开启。

运行之后,输出结果如下!

其中par new generation表示年轻代的内存使用情况,其它表达的内容与上相同。

3.3、Parallel Scavenge 和 Parallel Old 组合垃圾收集器

Parallel Scavenge 和 Parallel Old 组合的垃圾收集器,可以在运行时设置如下参数来开启。

需要注意的是,在 jdk1.8 及之后的版本中,-XX:+UseParallelGC和-XX:+UseParallelOldGC参数效果是一样的,都是用的 Parallel Old 作为老年代收集器;而在 jdk1.7 及之后的版本中,-XX:+UseParallelGC参数用的是 Serial Old 作为老年代收集器。

运行之后,输出结果如下!

3.4、ParNew 和 CMS + Serial Old 组合垃圾收集器

ParNew 和 CMS + Serial Old 组合的垃圾收集器,可以在运行时设置如下参数来开启。

运行之后,输出结果如下!

3.5、G1 垃圾收集器

G1 垃圾收集器,可以在运行时设置如下参数来开启。

运行之后,输出结果如下!

G1 收集器与以上收集器都不同,它会把整个 Java 堆分成若干个大小相等的独立区域,也是日志中的 Region,然后针对优先级高的 Region 区域进行收集。Region 区域可能存放的是年轻代的对象,也可能是老年代的对象。

04、小结

以上的日志输出,会发现很多的共性。

比如,以“GC”开头的,通常表示年轻代的收集情况;以“Full GC”开头的,表示整个堆的收集情况,其中带有“(System.gc()) ”信息的表示调用System.gc()方法所触发的 GC。

以下面这个日志为例,来解读一下相关信息。

  • 1.Full GC (System.gc()表示 Full GC 类型的 GC 动作,通过调用System.gc()方法而触发;
  • 2.PSYoungGen: 496K->0K(38400K)表示年轻代 GC 前使用的容量为 496K,GC 后该内存区域使用的容量为 0K,年轻代总容量为 38400K;
  • 3.ParOldGen: 8K->390K(87552K)表示老年代 GC 前使用的容量为 8K,GC 后该内存区域使用的容量为 390K,老年代总容量为 87552K;
  • 4.504K->390K(125952K)表示整个堆 GC 前使用的容量为 504K,GC 后该内存区域使用的容量为 390K,整个堆总容量为 125952K;
  • 5.Metaspace: 3008K->3008K(1056768K)表示元空间 GC 前使用的容量为 3008K,GC 后该内存区域使用的容量为 3008K,整个元空间总容量为 1056768K;
  • 6.0.0045268 secs表示 Full GC 耗时为 0.0045268 秒;
  • 7.Times: user=0.01 sys=0.00, real=0.00 secs表示 Full GC 期间用户的耗时、系统的耗时、实际操作的耗时,单位秒;

Heap 后面列举的是堆的内存使用情况。

本文主要围绕 GC 日志,进行了一次知识内容的整合和总结,内容比较多,如果有描述不对的地方,欢迎大家留言指出,不胜感激。

写到最后

最后感谢各位的阅读,原创不易,如果觉得文章写的不错,欢迎大家转发,点击【在看】让更多的人看到,谢谢大家的支持!

 

 转自: https://mp.weixin.qq.com/s/1O8rxy-MFJg8Hhv2f8AvBA

----- 2024年8月30日09:20:37

-----full gc  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/789465.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网盘+git个人ue大文件备份

88VIP的夸克网盘不用太可惜了,所以我用他的自动备份功能来备份我正在做的UE项目的.git文件,这样既可以留存版本更新信息,又可以存大文件了。做个人备份的话就懒得用gitlfs了,直接都放网盘里。回头本地文件丢了的话,就把.git下下来然后版本回退一下

maven 插件之 maven-shade-plugin,解决同包同名 class 共存问题的神器

开心一刻 有一天螃蟹出门,不小心撞倒了泥鳅泥鳅很生气地说:你是不是瞎啊!螃蟹说:不是啊,我是螃蟹概述 maven-shade-plugin 官网已经介绍的很详细了,我给大家简单翻译一下This plugin provides the capability to package the artifact in an uber-jar, including its dep…

数据跨境流动出新规,企业数据出海如何保障数据安全性?

数据出海是企业拓展海外市场、提升品牌影响力、应对市场竞争、实现产业升级和创新驱动的重要途径,随着全球化和数字化趋势的深入发展,数据出海成为越来越多企业的选择。为了在数据跨境高效流动的同时,确保国家和社会安全,保护公众利益,许多国家都相继出台法律法规来规范和…

一个批量爬取微博数据的神器

分享一个能批量下载微博图片/视频/评论的工具100.一个批量爬取微博数据的神器 分享一个能批量下载微博图片/视频/评论的工具 ‍ 起因 偶尔玩玩微博,最近看到了一名专业的 coser,因此想要下载一些她的微博,方便观看,也避免以后平台倒闭/博主退坑的情况导致无法看原微博。 ​…

数据无界:大型企业如何实现多区域文件安全传输的无缝体验?

随着企业全球化发展,大型企业分支机构的分布越来越广泛,多区域文件传输需求也随之增加。目前大型企业多区域文件数据存储和传输交换现状如下: 1.文件存储现状:集中和分散并存,局部集中,整体分散; 2.文件存储管理:不同区域、分支机构、业务部门,文件存储方案差异化,各…

Redis高可用方案:使用Keepalived实现主备双活

注意:请确保已经安装Redis和keepalived,本文不在介绍如何安装。 1、使用版本说明 Redis版本:5.0.2 Keepalived版本:1.3.5 Linux 版本:Centos7.9 查看Redis版本: /usr/local/redis/bin/redis-cli -v查看Keepalived版本信息: rpm -qa|grep keepalived 或者 keepalived -v2…

安全高效,一键搞定:Ftrans文件摆渡系统让数据流转更简单!

随着互联网技术的不断发展,网络攻击手段也不断的更新,为了防止外部攻击和内部数据泄密,高科技企业一般会实施内外网隔离,甚至在内部网络中又划分出业务网、办公网、生产网等进行隔离。但基于业务的需求,隔离网间仍存在文件传输的需求。如何通过文件摆渡系统,在保证数据安…

差模电感与共模电感总结

差模电感与共模电感总结 差模干扰信号和共模干扰信号 差模干扰信号是两个输入电源线之间反方向构成的电流回路信号。 共模干扰信号是两个输入线上同方向与大地构成的电流回路信号。 简而言之: 差模信号就是两个大小相等、方向相反的信号。 共模信号就是两个大小相等、方向相同…

Datawhale X 李宏毅苹果书AI夏令营深度学习进阶(二)

一.动量法 在上一个博客中,我们提到了动量法,现在继续补充如图所示,红色表示负梯度方向,蓝色虚线表示前一步的方向,蓝色实线表示真实的移动量。一开始没有前一次更新的方向,完全按照梯度给指示往右移动参数。负梯度方向跟前一步移动的方向加起来,得到往右走的方向。一般…

LCA 最近公共祖先

概念 最近公共祖先简称 LCA(Lowest Common Ancestor)。两个节点的最近公共祖先,就是这两个点的公共祖先里面,离根最远的那个。 感觉其实看个图就懂了吧图中例子 \(lca(u,v)=x\) 这个问题理解概念不难,主要是学会如何快速求来,下面介绍三种方法。 方法 1.暴力法 2. 倍增法…

ChatGPT学习之旅 (10) 系统全球化小助手

本篇我们一起来了解下如何基于ChatGPT中来帮助我们解决一些系统开发中的多语言/全球化/本地化的任务,通过给到清晰的提示词,让这些任务的解决时间缩短一半以上。大家好,我是Edison。 上一篇我们写了一个运维小助手的prompt,它帮我们写一些我们开发者不太愿意做的一些运维小…

信奥一本通题陈老师解题:1086:角谷猜想

​ 【题目描述】谓角谷猜想,是指对于任意一个正整数,如果是奇数,则乘3加1,如果是偶数,则除以2,得到的结果再按照上述规则重复处理,最终总能够得到1。如,假定初始整数为55,计算过程分别为16、8、4、2、1。程序要求输入一个整数,将经过处理得到11的过程输出来。【输入】…