jvm参数

Java 堆内存开关

VM 开关 VM 开关描述
-Xms 设置JVM启动时堆的初始化大小。
-Xmx 设置堆最大值。
-XX:newSize 表示新生代初始内存的大小,应该小于-Xms的值
-XX:MaxnewSize 表示新生代可被分配的内存的最大上限;当然这个值应该小于-Xmx的值
-Xmn 设置年轻代的空间大小,剩下的为老年代的空间大小。
-XX:PermGen 设置永久代内存的初始化大小(方法区)。
-XX:MaxPermGen 设置永久代的最大值(方法区)。
-XX:SurvivorRatio 提供Eden区和survivor区的空间比例。默认比例是8,表示 Eden:Survivor=8:2 (单Survivor占1/10)
-XX:NewRatio 提供年老代和年轻代的比例大小。默认值是2,表示 Young:Old=1:2 (Young占1/3)。如果同时设置了-Xmn,该先读取-Xmn

收集器设置

-XX:+UseSerialGC:设置串行收集器

-XX:+UseParallelGC:设置并行收集器

-XX:+UseParalledlOldGC:设置并行年老代收集器

-XX:+UseConcMarkSweepGC:设置并发收集器(cms)

垃圾回收统计信息

-XX:+PrintGC

-XX:+PrintGCDetails

-XX:+PrintGCTimeStamps

-Xloggc:filename

并行收集器设置

-XX:ParallelGCThreads=n:设置并行收集器收集时使用的CPU数。并行收集线程数。

-XX:MaxGCPauseMillis=n:设置并行收集最大暂停时间

-XX:GCTimeRatio=n:设置垃圾回收时间占程序运行时间的百分比。公式为1/(1+n)

并发收集器设置

-XX:+CMSIncrementalMode:设置为增量模式。适用于单CPU情况。

-XX:ParallelGCThreads=n:设置并发收集器年轻代收集方式为并行收集时,使用的CPU数。并行收集线程数。

jdk版本变更中jvm内存结构变化

永久代的工作从JDK 1.7就开始了。JDK 1.7中,存储在永久代的部分数据就已经转移到Java Heap或者Native Heap。但永久代仍存在于JDK 1.7中,并没有完全移除,
符号引用(Symbols)转移到了native heap;
字面量(interned strings)转移到了Java heap;
类的静态变量(class statics)转移到了Java heap。

Java8之后的变化:

  • 移除了永久代(PermGen),替换为元空间(Metaspace);
  • 永久代中的 class metadata 转移到了 native memory(本地内存,而不是虚拟机);
  • 永久代中的 interned Strings 和 class static variables 转移到了 Java heap;
  • 永久代参数 (PermSize MaxPermSize) -> 元空间参数(MetaspaceSize MaxMetaspaceSize)