Java虚拟机参数及垃圾收集器详解

本文详细介绍了Java虚拟机(JVM)的各种关键参数设置,包括内存分配、垃圾回收策略等,并探讨了不同垃圾收集器的特点与应用场景,帮助开发者更好地进行JVM调优。

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。
  • 。。。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值