常用虚拟机参数

216 阅读1分钟

JVM内存参数

-Xms

初始堆大小,默认为物理内存的1/64(<1GB),一般设置为与Xmx同样大小,防止扩容时内存抖动。

-Xmx

最大堆大小,默认为物理内存的1/4(<1GB) 。

-Xss

每个线程的堆栈大小,如果栈不是很深,应该是128k够用的,大的应用建议使用256k。这个选项对性能影响比较大,需要严格的测试。

GC参数

-XX:SurvivorRatio

Eden和Survivor的比值,默认8:1,即8

-XX:NewRatio

老年代和年轻代内存大小比例

-XX:MaxTenuringThreshold

对象从年轻代晋升到老年代经过GC次数的最大阈值

垃圾收集器选择

年轻代收集器

Serial收集器(-XX:+UseSerialGC,复制算法)

  • 单线程收集,进行垃圾收集时,必须暂停所有工作线程
  • 简单高效,Client模式下默认的年轻代收集器

ParNew收集器(-XX:+UseParNewGC,复制算法)

  • 多线程收集,其余行为特点与Serial一样
  • 单核执行效率不如Serial,在多核下执行才有优势。

Parallel Scavenge收集器(-XX:+UseParallelGC,复制算法)

Tips: 程序吞吐量 = 运行用户代码时间 / (运行用户代码时间 + 垃圾收集时间)

  • 比起关注用户线程停顿时间,更关注系统的吞吐量
  • 多核才有优势,Server模式下默认的年轻代收集器。

老年代收集器

Serial Old收集器(-XX:+UseSerialOldGC,标记-整理算法)

  • 单线程收集,进行垃圾收集时,必须暂停所有工作线程
  • 简单高效,Server模式下默认的老年代收集器

Parallel Old收集器(-XX:+UseParallelOldGC,标记-整理算法)

  • 多线程,吞吐量优先

CMS收集器(-XX:+UseConcMarkSweepGC,标记-清除算法)

  • 停顿时间短
  • 标记-清除算法使得该垃圾收集器会产生较多内存碎片

G1(Garbage First)收集器(-XX:+UseG1GC,复制+标记-整理算法)

  • 年轻代老年代不再物理隔离,仅逻辑隔离
  • 并行并发、分代收集、空间整合、可预测的停顿