GC日志

JVM参数设置

-XX:NewSize=5242880
-XX:MaxNewSize=5242880
-XX:InitialHeapSize=10485760
-XX:MaxHeapSize=10485760
-XX:SurvivorRatio=8
-XX:PretenureSizeThreshold=10485760
-XX:+UseParNewGC
-XX:+UseConcMarkSweepGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-Xloggc:gc.log

堆内存:10M

新生代:4MB

Survivor to/from:0.5M

老年代:5MB

大对象阈值:10M

程序代码

public class Demo1 {
    public static void main(String[] args) {
     //生成一个1M的数组
byte[] array1 = new byte[1024 * 1024]; array1 = new byte[1024 * 1024]; array1 = new byte[1024 * 1024]; array1 = null; //生成一个2M的数组 byte[] array2 = new byte[2 * 1024 * 1024]; } }

在生成一个2M的数组之前,JVM运行时内存图应该是这样的

 

 

 Eden 区有3个数组没有人引用,成了垃圾,共占用3M的内存,但是代码继续运行下去,需要在Eden区生成一个2M大小的数组

此时Eden区空间不够就会触发年轻代的Young GC

 

 

 打开gc.log,日志如下所示

Java HotSpot(TM) 64-Bit Server VM (25.231-b11) for windows-amd64 JRE (1.8.0_231-b11), built on Oct 5 2019 03:11:30 by "java_re" with MS VC++ 10.0 (VS2010)
Memory: 4k page, physical 16603172k(7254628k free), swap 17717284k(6828216k free)

CommandLine flags: -XX:InitialHeapSize=10485760 -XX:MaxHeapSize=10485760 -XX:MaxNewSize=5242880 -XX:NewSize=5242880 -XX:OldPLABSize=16 -XX:PretenureSizeThreshold=10485760 -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:SurvivorRatio=8 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseConcMarkSweepGC -XX:-UseLargePagesIndividualAllocation -XX:+UseParNewGC

0.093: [GC (Allocation Failure) 0.093: [ParNew: 3842K->512K(4608K), 0.0012121 secs] 3842K->1685K(9728K), 0.0013657 secs] [Times: user=0.13 sys=0.02, real=0.00 secs] 
Heap
par new generation total 4608K, used 3746K [0x00000000ff600000, 0x00000000ffb00000, 0x00000000ffb00000)
eden space 4096K, 78% used [0x00000000ff600000, 0x00000000ff9288e8, 0x00000000ffa00000)
from space 512K, 100% used [0x00000000ffa80000, 0x00000000ffb00000, 0x00000000ffb00000)
to space 512K, 0% used [0x00000000ffa00000, 0x00000000ffa00000, 0x00000000ffa80000)
concurrent mark-sweep generation total 5120K, used 1173K [0x00000000ffb00000, 0x0000000100000000, 0x0000000100000000)
Metaspace used 3251K, capacity 4496K, committed 4864K, reserved 1056768K
class space used 354K, capacity 388K, committed 512K, reserved 1048576K

日志详解

CommandLine flags:虚拟机启动时的参数

GC (Allocation Failure):对象分配失败

0.093:系统运行以后过了多少秒发生了此次GC,本次是93ms

ParNew: 3842K->512K(4608K),0.0012121 secs:此次GC是用ParNew垃圾收集器回收,新生代总空间为4608K(一个Eden4M+一个Survivor0.5M(必须保证有一个survivor是空闲的)=4.5M) ,GC之前使用了3842K,GC后只有512K的对象存活,耗时1.2ms

3842K->1685K(9728K), 0.0013657 secs:同上,表示整个堆内存的情况,总的堆内存9728k(新生代4.5M+老年代5M)

 

posted @ 2020-11-05 22:02  大碗炸酱面  阅读(163)  评论(0编辑  收藏  举报