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)