Java虚拟机参数及垃圾收集器详解
内存相关参数
-Xms [初始堆内存大小]
默认值:物理内存的1/64,默认情况下,当堆内空余内存小于40%时,JVM将会进行扩容,直至堆内存=-Xmx的值。
可通过设置参数:MinHeapFreeRatio来调整。
-Xmx [最大堆内存大小]
默认值:物理内存的1/4,默认情况下,当堆内空余内存大于70%时,JVM将会进行缩容,直至堆内存=-Xms的值。
可通过设置参数:MaxHeapFreeRatio来调整。
-Xmn [年轻代内存大小]
在JDK 1.4及以后版本,年轻代内存=eden+survivor0+survivor1,由于整个堆内存=年轻代+老年代,所以增加年轻代会导致老年代的内存大小降低。
-XX:SurvivorRatio [年轻代中Eden区与Survivor区大小比值]
默认值:8,代表Eden区占年代的8/10,两个survivor区各占1/10。
-XX:NewRatio [年轻代与老年代的大小比值]
默认值:4,代表老年代占堆内存的4/5,年轻代占堆内存的1/5。
-Xss [每个线程堆栈大小]
JDK1.5之后每个线程的堆栈大小为1MB,早期每个线程的堆栈大小为256KB
-XX:MaxDirectMemorySize [直接内存(对外内存)]
-XX:MetaspaceSize [元空间内存大小]
-XX:MaxMetaspaceSize [最大元空间内存大小]
GC相关参数
-XX:+UseParallelGC
-XX:UseParNewGC
-XX:ParallelGCThreads
-XX:UseParallelOldGC
-XX:MaxGCPauseMillis [每次年轻代gc的最长时间、用户线程暂停时间]
-XX:+ScavengeBeforeFullGC [Full gc前先执行Minor gc]
-XX:UseConcMarkSweepGC [使用CMS GC(老年代gc)]
-XX:CMSFullGCsBeforeCompaction [经过多少次Full gc后进行内存碎片整理、压缩]
-XX:+UseCMsCompactAtFullCollection [在Full gc时对老年代进行内存水平整理、压缩]
垃圾收集器
-
图中共展示了7种不同分代的垃圾收集器
Serail、ParNew、Parallel Scavenge、Serial Old、Parallel Old、CMS、G1
-
他们所在区域即代表了其工作区间。
新生代GC:Serial、ParNew、Parallel Scavenge。
老年代GC:CMS、Parallel Old、Serial Old。
整堆GC:G1(商业)。
-
收集器之间存在连线,表明他们可以搭配使用。
-
并行收集器 (Parallel):指的是多条垃圾收集线程并行工作,此时用户线程处于等待状态,如ParNew、Parallel Scavenge、Parallel Old。
-
并发收集器(Concurrent):指用户线程与垃圾收集线程同时执行,但谁先执行不一定(可能并行、也可能交替),如CMS。
-
Minor GC:新生代GC,指发生在新生代的垃圾收集动作。由于大部分Java对象都是朝生夕灭,所以Minor GC非常频繁。
-
Full GC:老年代GC、又叫Major GC,指发生在老年代的垃圾收集动作。出现Full GC经常伴随至少1次的Minor GC(Parallel Scavenge GC可以设置),Full GC的速度一般比Minor GC慢10倍以上。
使用总结(jvm调优方向)
- 一般来说、堆越大越好。
- 堆每次调整大小都会触发一次gc,避免频繁的调整内存,建议 -Xms=-Xmx。
- 如果内存允许,可以将-Xms设置为预期大小,将-Xmx设置为一个合理的更大的值。
- 年轻代 越大,minor gc越少;堆内存固定的情况下,年轻代越大,意味着老年代变小,会产生更多的Full gc。
- 。。。
本文详细介绍了Java虚拟机(JVM)的各种关键参数设置,包括内存分配、垃圾回收策略等,并探讨了不同垃圾收集器的特点与应用场景,帮助开发者更好地进行JVM调优。
806

被折叠的 条评论
为什么被折叠?



