JVM調(diào)優(yōu)是提高Java應(yīng)用程序性能的重要方面。JVM提供了許多參數(shù)來調(diào)優(yōu),這些參數(shù)可以在啟動(dòng)JVM時(shí)設(shè)置。以下是一些常用的JVM調(diào)優(yōu)參數(shù):
-Xmx:用于設(shè)置JVM最大堆內(nèi)存大小。默認(rèn)值是物理內(nèi)存的1/4或1/8,具體取決于JVM版本和操作系統(tǒng)??梢酝ㄟ^設(shè)置-Xmx參數(shù)來增加JVM的最大堆內(nèi)存,從而提高程序的性能。
-Xms:用于設(shè)置JVM初始堆內(nèi)存大小。默認(rèn)值與-Xmx相同??梢酝ㄟ^設(shè)置-Xms參數(shù)來減少JVM啟動(dòng)時(shí)的內(nèi)存分配,從而加快啟動(dòng)時(shí)間。
-XX:PermSize:用于設(shè)置JVM永久代內(nèi)存大小。永久代存儲(chǔ)的是類的元數(shù)據(jù)信息,包括類名、字段名、方法名等。默認(rèn)值是64MB,但是在JDK8之后已經(jīng)被移除了。
-XX:MaxPermSize:用于設(shè)置JVM最大永久代內(nèi)存大小。默認(rèn)值是64MB,但是在JDK8之后已經(jīng)被移除了。
-XX:NewSize:用于設(shè)置JVM新生代內(nèi)存大小。新生代存儲(chǔ)的是新創(chuàng)建的對(duì)象。默認(rèn)值是物理內(nèi)存的1/4或1/8,具體取決于JVM版本和操作系統(tǒng)。
-XX:MaxNewSize:用于設(shè)置JVM最大新生代內(nèi)存大小。默認(rèn)值是物理內(nèi)存的1/4或1/8,具體取決于JVM版本和操作系統(tǒng)。
-XX:SurvivorRatio:用于設(shè)置JVM新生代中Eden區(qū)和Survivor區(qū)的比例。默認(rèn)值是8,即Eden區(qū)和Survivor區(qū)的比例為8:1:1。
-XX:MaxTenuringThreshold:用于設(shè)置JVM對(duì)象在Survivor區(qū)中存活的次數(shù)。默認(rèn)值是15,表示對(duì)象在Survivor區(qū)中存活15次后會(huì)被移動(dòng)到年老代中。
-XX:+UseParallelGC:用于啟用并行垃圾回收器。并行垃圾回收器可以利用多個(gè)線程來進(jìn)行垃圾回收,從而提高回收效率。
-XX:+UseConcMarkSweepGC:用于啟用CMS垃圾回收器。CMS垃圾回收器可以在不停止應(yīng)用程序的情況下進(jìn)行垃圾回收,從而減少STW時(shí)間。
-XX:+UseG1GC:用于啟用G1垃圾回收器。G1垃圾回收器可以在不停止應(yīng)用程序的情況下進(jìn)行垃圾回收,并且可以根據(jù)應(yīng)用程序的需求動(dòng)態(tài)調(diào)整回收策略。
以上是一些常用的JVM調(diào)優(yōu)參數(shù),可以根據(jù)應(yīng)用程序的需求進(jìn)行調(diào)整,從而提高程序的性能和穩(wěn)定性。
補(bǔ)充一下JDK7和JDK8版本中JVM調(diào)優(yōu)參數(shù)的差異。
JDK7版本中常用的JVM調(diào)優(yōu)參數(shù)包括:
- -Xmx:用于設(shè)置JVM最大堆內(nèi)存大小。
- -Xms:用于設(shè)置JVM初始堆內(nèi)存大小。
- -XX:PermSize:用于設(shè)置JVM永久代內(nèi)存大小。
- -XX:MaxPermSize:用于設(shè)置JVM最大永久代內(nèi)存大小。
- -XX:NewSize:用于設(shè)置JVM新生代內(nèi)存大小。
- -XX:MaxNewSize:用于設(shè)置JVM最大新生代內(nèi)存大小。
- -XX:SurvivorRatio:用于設(shè)置JVM新生代中Eden區(qū)和Survivor區(qū)的比例。
- -XX:MaxTenuringThreshold:用于設(shè)置JVM對(duì)象在Survivor區(qū)中存活的次數(shù)。
- -XX:+UseParallelGC:用于啟用并行垃圾回收器。
- -XX:+UseConcMarkSweepGC:用于啟用CMS垃圾回收器。
而在JDK8版本中,由于永久代被移除,因此相關(guān)的JVM調(diào)優(yōu)參數(shù)也被廢棄。取而代之的是元空間(Metaspace),常用的JVM調(diào)優(yōu)參數(shù)包括:
- -Xmx:用于設(shè)置JVM最大堆內(nèi)存大小。
- -Xms:用于設(shè)置JVM初始堆內(nèi)存大小。
- -XX:MetaspaceSize:用于設(shè)置JVM元空間大小。
- -XX:MaxMetaspaceSize:用于設(shè)置JVM最大元空間大小。
- -XX:NewSize:用于設(shè)置JVM新生代內(nèi)存大小。
- -XX:MaxNewSize:用于設(shè)置JVM最大新生代內(nèi)存大小。
- -XX:SurvivorRatio:用于設(shè)置JVM新生代中Eden區(qū)和Survivor區(qū)的比例。
- -XX:MaxTenuringThreshold:用于設(shè)置JVM對(duì)象在Survivor區(qū)中存活的次數(shù)。
- -XX:+UseParallelGC:用于啟用并行垃圾回收器。
- -XX:+UseConcMarkSweepGC:用于啟用CMS垃圾回收器。
- -XX:+UseG1GC:用于啟用G1垃圾回收器。
需要注意的是,JDK8版本中默認(rèn)使用的是Parallel垃圾回收器
例如:-Xmx2g -Xms2g -XX:MaxNewSize=512m。