jvm虚拟机调优里面的相关参数

mac2025-04-20  2

jvm参数详细介绍

#默认初始堆内存 -Xms512m   #最大堆内存  -Xmx512m #最小堆内存 (新生代大小) -Xmn256m  #棧最大深度大小) -Xss256k #(打印详细的GC日志) -XX:+PrintGCDetails #让GC可以更快的执行。(只是JDK 5里对GC新增加的参数) -XX:+UseParallelGC #G1收集器(或者垃圾优先收集器)的设计初衷是为了尽量缩短处理超大堆(大于4GB)时产生的停顿。相对于CMS的优势而言是内存碎片的产生率大大降低。 #PS:开启G1收集器的方式 -XX:+UseG1GC #去重字符串  开启G1收集器的方式用 -XX:+UseStringDeduplication

#GC参数解析 #-XX:+UseSerialGC 使用串行回收器进行回收,这个参数会使新生代和老年代都使用串行回收器,新生代使用复制算法,老年代使用标记-整理算法。Serial收集器是最基本、历史最悠久的收集器,它是一个单线程收集器。一旦回收器开始运行时,整个系统都要停止。Client模式下默认开启,其他模式默认关闭。 #-XX:+UseParallelOldGC: 新生代和老年代都使用并行收集器。打印出的GC会带PSYoungGen、ParOldGen关键字。 #XX:+UseConcMarkSweepGC:Concurrent Mark Sweep 并发标记清除,即使用CMS收集器。它是和应用程序线程一起执行,相对于Stop The World来说虚拟机停顿时间较少。停顿减少,吞吐量会降低。它使用的是 标记清除算法,运作过程为四个步骤,分别是 初始标记—并发标识—重新标记—并发清除。它是老年代的收集算法,新生代使用ParNew收集算法。默认关闭CMS收集器的缺点是对服务器CPU资源较为敏感,在并发标记时会降低吞吐量。它使用的标记清除算法也会产生大量空间碎片,空间碎片的存在会加大Full GC的频率,虽然老年代还有足够的内存,但是因为内存空间连续,不得不进行Full GC。 #-XX:+UseConcMarkSweepGC 指定使用的垃圾收集器,这里使用CMS收集器 #-XX:+ UseCMSCompactAtFullCollection:Full GC后,进行一次整理,整理过程是独占的,会引起停顿时间变长。仅在使用CMS收集器时生效。 #-XX:ParallelCMSThreads:设置并行GC时进行内存回收的线程数量 #-XX:PreternureSizeThreshold:直接晋升老年代的对象大小,设置了这个参数后,大于这个参数的对象直接在老年代进行分配。 #UseParNewGC:并发串行收集器,它是工作在新生代的垃圾收集器,它只是将串行收集器多线程化,除了这个并没有太多创新之处,而且它们共用了相当多的代码。它与串行收集器一样,也是独占式收集器,在收集过程中,应用程序会全部暂停。但它却是许多运行在Server模式下的虚拟机中首选的新生代收集器,其中有一个与性能无关但很重要的原因是,除了Serial收集器外,目前只有它能与CMS收集器配合工作。 #UseParallelGC:并行收集器,同时运行在多个cpu之间,物理上的并行收集器,跟上面的收集器一样也是独占式的,但是它最大化的提高程序吞吐量,同时缩短程序停顿时间,另外它不能与CMS收集器配合工作。

#.-XX:CMSInitiatingOccupancyFraction=70 和-XX:+UseCMSInitiatingOccupancyOnly #  这两个设置一般配合使用,一般用于『降低CMS GC频率或者增加频率、减少GC时长』的需求 # -XX:CMSInitiatingOccupancyFraction=70 是指设定CMS在对内存占用率达到70%的时候开始GC(因为CMS会有浮动垃圾,所以一般都较早启动GC); #-XX:+UseCMSInitiatingOccupancyOnly 只是用设定的回收阈值(上面指定的70%),如果不指定,JVM仅在第一次使用设定值,后续则自动调整.

#JVM初始分配的非堆内存 -XX:PermSize=64M  #JVM最大允许分配的非堆内存,按需分配 -XX:MaxPermSize=128M  #设置GC的最大暂停时间为200ms。 -XX:MaxGCPauseMillis=200 #(元空间默认大小) -XX:MetaspaceSize=128m  #(元空间最大大小) -XX:MaxMetaspaceSize=128m  #(新生代分区比例 8:2) -XX:SurvivorRatio=8 

最新回复(0)