本文基础:
1, 已经理解 JVM 内存结构, 对堆内存结构有清晰的认识 (Eden,s0,s1,OldGen)
2, 理解通常情况下堆内存分配的使用对象 (new 出来的对象, 注意区分引用是存放在方法区)
理解几个常用参数:(基础设置:-XX:PrintGCDetails)
1, 设置堆内存大小:-Xmx(最大堆内存) -Xms(初始对内存) -Xmn(新生代大小) . 注意: 一般最大堆内存和初始堆内存大小设置相同, 原因避免频繁的 Minor GC
2, 设置 Eden 和 s0,s1 的比例:-XX:SurvivorRatio=8, 表示 8:1:1(可以根据项目需要进行设置)
3, 大对象直接进入老年代的设置:-XX:PretenureSizeThreshold(单位字节)
比如:-XX:PretenureSizeThreshold=3145728(表示 3M)
4, 设置进入老年代的年龄:-XX:MaxTenuringThreshold(年龄的增长原则: 每存活过一次 Minor GC, 则加 1)
5, 进入老年代的另一个原则: Survivor 空间相同年龄所有对象大小的总和大于 Survivor 空间的一半, 年龄大于或等于该年龄对象的直接进入老年代, 无需等到 MaxTenuringThreshold 设置的大小.
来源: http://www.jianshu.com/p/041598ef56c6