当前位置: 首页 > 后端技术 > Java

JVM常用参数

时间:2023-04-01 18:00:05 Java

(后面有新的会补充)-XX:MaxTenuringThreshold:对象晋升到老年代的阈值,默认值15(不是绝对的,如果所有对象的大小都一样Survivor空间中的age合并Survivor空间的一半以上,age大于等于这个age的对象可以直接进入oldage)-XX:MaxPermSize~~:permanentgenerationsize-XX:MaxDirectMemorySize:directmemorysize,默认与-Xmx一致-XX:+/-UseTLAB:是否启用TLAB-XX:MaxMetaspace=256m:元数据区,默认无限大,受Java进程使用内存影响-XX:FieldsAllocationStyle:对象内存分配中实例数据区的存储顺序-XX:CompactFields=true:HotSpot在分配对象实例数据时,总是分配相同大小的字段一起存储。如果满足这个条件,父类中定义的变量就会出现在子类之前。小变量也允许插入到父变量的空间,节省一点空间-XX:+UseCondCardMark:是否开启JVM卡表条件判断,尽量减少虚假共享带来的性能损失-XX:MaxGCPauseMillis(毫秒>0):控制最大垃圾回收暂停时间,默认值为200-XX:ParallelGCThreads=NUM:垃圾回收并行执行线程数,默认为CPU核心数:Eden区和Survivor区的比例-XX:PretenureSizeThreshold:提升老年代对象的大小,如果超过指定的大小,会直接在老年代分配,默认是0-XX:+PrintGCDetails:打印GC详细日志-XX:+PrintHeapAtGC:打印每次GC前后堆和方法区可用容量的变化-XX:+PrintGCApplicationConcurrentTime:查看用户线程在GC过程中的并发时间-XX:+PrintGCApplicationStoppedTime:查看用户线程在GC过程中的停顿时间GC进程-XX:+PrintFlagsFinal:查看垃圾回收的JVM参数默认值设备相关:CMS相关见文章-XX:+UseConMarkSweepGC:启用CMS垃圾收集器,新生代使用ParNew,老年代使用CMS-XX-XX:+UseCMSInitiatingOccupancyOnly:与XX:CMSInitiatingOccupancyFraction配合使用,只使用设置的回收阈值(上面指定的70%),如果不指定,JVM只在第一次使用设置的值,后面会自动调整。-XX:+/-CMSPrecleaningEnabled:打开/关闭CMS并发预清理。-XX:CMSScheduleRemarkEdenSizeThreshold:CMS可以取消并发预处理阶段的开启条件-->默认为2M取消并发预处理阶段的取消条件-->最大执行时间,默认为5000ms50-XX:+UseCMSCompactAtFullCollection:在FullGC之前进行一次内存整理,默认开启。为0,表示每次都会对内存进行排序。-XX:+CMSScavengeBeforeRemark:强制在CMSfinal/remarking阶段之前进行一次MinorGC,防止可中断的预清理等到新生代MinorGC,导致新生代对象过多。导致最终标记时间过长,导致停顿时间过长UninstallunusedG1lgarbagecollectorsinthepermanentgeneration-XX:G1HeapRegionSize=8:设置G1垃圾收集器Region大小,取值范围应为1MB~32MB,以及它应该是2的N次方。-XX:G1NewSizePercent:新生代的最小值,默认为5%-XX:G1MaxNewSizePercent:新生代的最大值,默认为60%-XX:ParallelGCThreads:并行GC线程数STW-XX:ConcGCThreads=n:duringconcurrentmarking,NumberofGCthreads-XX:InitiatingHeapOccupancyPercent:设置触发标记周期的Java堆占用阈值。默认值为45%。这里的Javaheapratio指的是nonyoungcapacitybytes,其中old+humongous-XX:G1HeapWastePercent:G1停止回收的最小内存。默认是heap的5%,也就是说每次回收的时候不需要处理所有的垃圾。可以留下少量的nextprocessing,也减少了单次GC消耗的时间。-XX:+GCTimeRatio:计算Java应用线程和GC线程所花费时间的比例。默认是9,这跟新生代分配内存的比例是一样的。该参数的主要目的是允许用户控制在应用程序上花费的时间。G1的计算公式为100/(1+GCTimeRatio)。如果该参数设置为9,它将花费最多10%的时间在GC上。ParallelGC的默认值为99,这意味着1%的时间花在了GC上。这是因为ParallelGC是贯穿整个GC的,而G1是根据Region进行划分的,不需要全局扫描整块内存。-XX:G1ReserverPercent:G1为分配保证预留的空间比例,默认为10%,即老年代会预留10%的空间用于新生代对象的提升。新生代对象提升失败导致FullGC。这个参数可以适当增加(增加这个参数也意味着老年代可用的空间减少)堆内存参数-Xmx:指定最大堆内存,如-Xmx49。但是这里只限制堆内存的Heap部分的最大值,不包括堆外内存和栈内存-Xms:指定堆内存的初始化大小,最小值,如Xms4g。而且,指定的内存大小并不是操作系统实际分配的初始值,而是GC先规划好,在申请的时候再分配。专用服务需要保持-Xmx和-Xms一致,否则应用启动后可能会出现多次FullGC。当两种配置不同时,堆内存扩展可能会导致性能抖动。-Xmn:相当于-XX:NewSize,Young区的大小。使用G1垃圾收集器时不应设置此选项。可以在其他一些业务场景中设置。官方推荐设置为1/2~1/of-Xmx4-XX:MaxPerSize:jdk1.7之前用这个。JDK8以后,Meta空间默认是无限大的。该参数无效。最大可食用堆外内存,该参数相当于-Dsun.nio.MaxDirectMemorySize=1m-Xss:设置每个线程栈的字节数,影响栈的深度分析诊断-XX:+-HeapDumpOnOutOfMemoryError:WhenOOMError产生时自动转储堆内存-XX:HeapDumpPath:与HeapDumpOnOutOfMemoryError配合使用,指定内存溢出时Dump文件的目录,默认为Java程序启动的工作目录-XX:OnError:发生致命错误时执行的脚本-XX:OnOutOfMemoryError:执行抛出OOMError错误的脚本-XX:ErrorFile=fileName:致命错误日志文件名,绝对路径或相对路径-Xdebug-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=1506:EnableremotedebuggingRunmode-server:设置JVM使用server模式,特点是启动速度慢,但运行时性能和内存管理效率高,适合生产环境。在64位JDK环境下默认启用该模式,忽略-client参数-clinet:JDK1.7之前的32位X86机器上默认值为-client选项。设置JVM使用客户端模式,其特点是启动速度快,但运行时性能和内存管理效率较低。通常用于客户端程序或本地PC开发调试。-Xint:以解释模式运行,-Xint标志会强制JVM解释所有的字节码,这会减慢运行速度,通常是10倍或更多-Xcomp:-Xcomp参数与-Xint刚好相反,并且JVM将在首次使用时将所有字节码编译为本机代码,从而实现最大程度的优化。【注意预热】-Xmixed:-Xmixed是混合模式,混合了解释模式和编译模式。由JVM决定。这是JVM默认的模式,也是推荐的模式。使用java-version查看混合模式等信息;编译优化-XX:+DoEscapeAnalysis:启用逃逸分析-XX:+EliminateAllocations:启用标量替换-XX:+EliminateLocks:启用同步消除//www.oracle.com/java/t...本文由OpenWrite发表,一个多帖子的博客平台!