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,也

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

被折叠的 条评论
为什么被折叠?



