JVM:31 硬核技能:JVM的Young GC日志查看方法

本文详细解析了JVM默认参数的查看方法,通过GC日志分析了一次YoungGC的过程,包括触发原因、执行细节及内存使用变化。同时,介绍了堆内存的分配与使用情况,以及Metaspace和Classspace的占用状态,帮助深入理解JVM内存管理机制。

1. 程序运行采用的默认JVM参数如何查看?

在GC 日志中,可以看到如下内容:

CommandLine flags: -XX:InitialHeapSize=10485760 -XX:MaxHeapSize=10485760 -XX:MaxNewSize=5242880 ……

这就是告诉你这次运行程序采取的JVM参数是什么,基本都是我们设置的,同时还有一些参数默认就给设置了,不过一般关系不大。

如果没有设置JVM参数,而想看系统用的默认JVM参数,只需要给JVM加一段打印GC日志的参数,就可以在这里看到他默认会给你的JVM进程分配多大的内存空间了。默认给的内存是很小的。

2. 一次GC的概要说明

接着看GC日志中的如下一行:

0.112: [GC (Allocation Failure) 0.112: [ParNew: 3930K->512K(4608K), 0.0016424 secs] 3930K->551K(9728K), 0.0018267 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]

这个就是概要说明了本次GC的执行情况

GC(Allocation Failure),看字面意思就可以知道,为啥会发生一次GC?

从原来的图中可以看出,要分配一个2MB的数组,结果Eden区内存不够了,所以就出现了 “Allocation Failure”,也就是对象分配失败。

所以此时就要触发一次Young GC。

那这次GC是什么时候发生的呢?

这很简单,看一个数字,“0.112” ,这个意思就是你的系统运行过后过了多少秒发生了本次GC,比如这里就是大概系统运行之后大概100多毫秒,发生了本次GC。

ParNew: 3930K->512K(4608K), 0.0016424 secs

这个 “ParNew” 的意思是,触发的是年轻代的Young GC,所以是用我们指定的ParNew 垃圾回收器执行GC的。

3930K->512K(4608K)

这个代表的意思是,年轻代可用空间是4608KB,也就是4.5MB。

之所以是4.5MB,是因为,Eden区是4MB,两个Survivor区中只有一个是可以放存活对象的,另外一个是必须一直保持空闲的,所以它考虑年轻代的可用空间,就是 Eden+1个Survivor的大小,也就是4.5MB。

然后 3930K->512K,也

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值