通用配置
- -Xms20m:初始大小内存,默认为物理内存1/64 —— 等价于-XX:InitialHeapSize
- -Xmx20m:最大分配内存,默认为物理内存1/4 —— 等价于-XX:MaxHeap
- -Xss128K:设置单个线程的大小,一般默认为512K~102 —— 等价于-XX:ThreadStackSizeSize
- -Xmn10m:设置新生代内存,剩余的为老年代的
- -XX:PretenureSizeThreshold=1m:大对象直接分配在老年代,这个参数只对 Serial 和ParNew两个收集器有效。
- -XX:MaxTenuringThreshold=15:动态年龄超过15次,进入老年代。等于 0 的话,就直接入老年代。
- -XX:G1HeapRegionSize:G1收集器每个Region的大小
- -XX:SurvivorRatio=8:设置一个eden和一个suvivor的比值
- -XX:+PrintTenuringDistribution:JVM 在每次新生代GC时,打印出幸存区中对象的年龄分布
- -XX:+HeapDumpOnOutOfMemoryError:打印 OOM 日志
- -XX:HeapDumpPath=路径:OOM 日志输出位置(可通过JVisualVM 工具进行分析)
有些资料说,Xms、Xmx 设置的是 JVM 内存大小,是不对的,JVM 除了留给开发人员使用的堆内存之外还有非堆内存。
有三种方式可以划分年轻代大小:-Xmn 方式、-XX:NewSize + -XX:MaxNewSize 方式、-XX:NewRatio 方式。三种都可以,优先级从高到低依次是 -XX:NewSize + -XX:MaxNewSize 方式、-Xmn 方式、-XX:NewRatio 方式,也就是说配置了前面优先级高的后面的优先级低的就被覆盖掉了。