参考资料
Debug环境
笔者是在IDEA + jvm调试工具环境下调试.
虚拟机启动参数配置
123456-XX:+PrintGCDetails --虚拟机在发生垃圾收集行为时打印内存回收日志,并且在进程退出的时候输出当前的内存各区域分配情况。-Xms20M --初始堆大小-Xmx20M --最大堆大小-Xmn10M --年轻代大小-XX:+UseSerialGC --指定垃圾回收器为串行垃圾回收器-XX:PretenureSizeThreshold=3145728 --超过阀值(3MB)直接分配到老年代,只对Serial和ParNew两款收集器有效常用调试命令
|
|
|
|
|
|
内存分配与回收策略
对象优先在Eden分配
|
|
调试到第一次发生YGC的地方,GC导致的内存占用变化如下图所示.
直接分配大对象到老年代
|
|
内存占用变化如下图所示.
长期存活的对象进入老年代
|
|
内存占用变化如下图所示.
第2次YDC后堆内存信息
动态对象年龄判定
|
|
内存占用变化如下图所示.
空间分配担保
|
|
内存占用变化如下图所示.