JVM调优Demo(二)避免新生代过大(调整合适新生代大小)
2016-05-12 21:08
716 查看
先上代码:
代码和JVM调优Demo(一)完全一样运行参数:
-Xmx20M -Xms20M -Xmn18M -verbose:gc -XX:+PrintGCDetails运行日志:
[GC (Allocation Failure) --[PSYoungGen: 13722K->13722K(16384K)] 13722K->13730K(18432K), 0.0008514 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] [Full GC (Ergonomics) [PSYoungGen: 13722K->4618K(16384K)] [ParOldGen: 8K->1K(2048K)] 13730K->4619K(18432K), [Metaspace: 2575K->2575K(1056768K)], 0.0053240 secs] [Times: user=0.11 sys=0.00, real=0.01 secs] Heap PSYoungGen total 16384K, used 6810K [0x00000000fee00000, 0x0000000100000000, 0x0000000100000000) eden space 14336K, 47% used [0x00000000fee00000,0x00000000ff4a6998,0x00000000ffc00000) from space 2048K, 0% used [0x00000000ffe00000,0x00000000ffe00000,0x0000000100000000) to space 2048K, 0% used [0x00000000ffc00000,0x00000000ffc00000,0x00000000ffe00000) ParOldGen total 2048K, used 1K [0x00000000fec00000, 0x00000000fee00000, 0x00000000fee00000) object space 2048K, 0% used [0x00000000fec00000,0x00000000fec004c0,0x00000000fee00000) Metaspace used 2582K, capacity 4486K, committed 4864K, reserved 1056768K class space used 287K, capacity 386K, committed 512K, reserved 1048576K
可以看到相比16M的新生代,这次增加了一次FullGC,这是不理想的。
大致过程:
因为旧生代太小,第一次MinorGC后,进入旧生代的对象发现jvm剩余空间不足,jvm悲观原则,新生代采用并行回收gc 的时候会在第一次就检查旧生代的剩余空间触发FullGC。
总结:
新生代太小导致Mionr的频率大幅上升,也会导致大量对象进入旧生代,触发FullGC。
新生代太大,导致旧生代太小,FullGC频率上升,也有可能导致MinorGC的时间上升。
按照书上的总结一般新生代在heap的比例为33%
相关文章推荐
- Java 6 JVM参数选项大全(中文版)
- C#开发中的垃圾回收机制简析
- 详谈.net中的垃圾回收机制
- 跟我学习javascript的垃圾回收机制与内存管理
- 深入解析JVM对dll文件和对类的装载过程
- Java虚拟机JVM性能优化(二):编译器
- Java程序员必须知道的5个JVM命令行标志
- 深入解析PHP垃圾回收机制对内存泄露的处理
- PHP垃圾回收机制引用计数器概念分析
- 析构函数与php的垃圾回收机制详解
- Java虚拟机JVM性能优化(三):垃圾收集详解
- 简单谈谈JVM、JRE和JDK的区别与联系
- 解析Java虚拟机中类的初始化及加载器的父委托机制
- JAVA中JVM的重排序详细介绍
- 浅谈Java的虚拟机结构以及虚拟机内存的优化
- Java虚拟机JVM性能优化(一):JVM知识总结
- Android Studio 报错failed to create jvm error code -4的解决方法
- 解析Linux系统中JVM内存2GB上限的详解
- 了解Java虚拟机JVM的基本结构及JVM的内存溢出方式
- Java堆空间占满的gc日志实例