堆内存
最大小堆
-Xms<heap size>[unit]
- 默认值为物理内存的1/64
- 一般小于1G
- 当空余堆内存不足40%时,JVM会自动增大直到最大堆限制
最大堆
-Xmx<heap size>[unit]
- 默认值为物理内存的1/4
- 一般小于1G
- 当空余堆内存超过70%时,JVM会自动减少直到最小堆限制
新生代大小
-Xmn
- 新生代大小一般为整个堆的3/8
新老年代比例
-XX:NewRatio=1
- GC调优策略要尽可能将对象留在新生代
- 该值一般不需要设置
元空间大小
-XX:MetaspaceSize=N //设置 Metaspace 的初始(和最小大小)
-XX:MaxMetaspaceSize=N //设置 Metaspace 的最大大小,如果不指定大小的话,随着更多类的创建,虚拟机会耗尽所有可用的系统内存。
调优策略
最大堆和最小堆
- 一般情况,最大堆和最小堆配置一样
- 避免垃圾回收之后重新分隔堆区造成资源浪费
新生代和老年代
- 调整新生代和老年代的比率
- 如果最大堆和最小堆一样,且设置了新生代后,不需要设置该比值
- 官方推荐新生代占堆的3/8
线程栈空间
- 相同物理内存下,减少栈空间可以生成更多的线程
- 一般操作系统同一个进程生成的线程数为3000-5000左右
幸存代和Eden区比值
- 一般为 E:S0:S1=8:1:1
垃圾回收器
垃圾回收器具体选择
-XX:+UseSerialGC
-XX:+UseParallelGC
-XX:+UseParNewGC
-XX:+UseG1GC
GC记录
输出GC活动日志
-XX:+UseGCLogFileRotation
-XX:NumberOfGCLogFiles=< number of log files >
-XX:GCLogFileSize=< file size >[ unit ]
-Xloggc:/path/to/gc.log