首页 > 其他分享 >常用JVM虚拟机参数说明

常用JVM虚拟机参数说明

时间:2024-05-23 09:11:11浏览次数:13  
标签:选项 设置 收集器 虚拟机 默认 XX 参数 JVM GC

常用JVM虚拟机参数说明

原文地址:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html

非标准选项

参数说明
-Xcomp强制JVM虚拟机在方法第一次被调用的时候就进行本地编译。
-Xint强制JVM运行在解释模式。在该模式下,方法不会被编译为本地代码,所有的字节码都会被解释执行。
-Xloggc:filename设置GC日志信息的保存路径。如果同时传递-verbose:gc的话,该参数会覆盖-verbose:gc的设置。
-Xmnsize同时设置初始化和最大的年轻代大小,若不指定单位,则默认为字节,在数字后边可以跟单位,如k或K,m或M,g或G。Oracle建议年轻代的大小是整个堆大小的四分之一到一半之间。还可以使用-XX:NewSize设置年轻代的初始大小,-XX:MaxNewSize指定最大大小。
-Xmssize设置堆的初始大小,必须要大于1M,可以通过在大小后追加单位,如k或K,m或M,g或G。若不设置该值,则当前值为年轻代和老年代的初始大小总和。
-Xmxsize设置堆的最大值,必须要大于2M。
-Xsssize设置线程栈的大小。每个平台的默认值不同
Linux/ARM (32-bit): 320 KB
Linux/i386 (32-bit): 320 KB
Linux/x64 (64-bit): 1024 KB
OS X (64-bit): 1024 KB
Oracle Solaris/i386 (32-bit): 320 KB
Oracle Solaris/x64 (64-bit): 1024 KB

高级运行时选项

参数说明
-XX:+DisableAttachMechanism禁止工具连接到当前JVM,当前选项默认关闭,所以可以使用JVM的工具,如jcmdjstackjmapjinfo等。
-XX:MaxDirectMemorySize=size设置New I/O(java.nio包)中direct-buffer最大允许分配的空间,默认为字节。可以追加单位,k或K,m或M,g或G。默认值是0,JVM自动分配direct-buffer的大小。
-XX:-UseBiasedLocking禁用偏向锁。默认使用偏向锁。
-XX:-UseCompressedOops禁用指针压缩。默认打开指针压缩。压缩指针通常用在当堆空间小于32GB的时候。当压缩指针打开的时候,对象引用使用32位偏移量代替64位指针,这样会提高应用在堆小于32GB时候的性能。这个选项只能用在64位的JVM上。

高级JIT编译器选项

参数说明
-XX:+AggressiveOpts启动强制性能优化,该选项有望在以后的发行版中作为默认启动的选项。默认禁用。
-XX:+BackgroundCompilation使用后台编译。该选项默认激活。使用 -XX:-BackgroundCompilation禁用该功能。
-XX:CICompilerCount=threads设置编译线程的数量。JVM在server模式下默认是2,在client模式下默认是1。如果使用分层编译的话,这个值会扩展到与CPU核数一样的值。
-XX:CompileThreshold=invocations设置方法在被编译前的调用次数。在server模式的JVM中,JIT编译器为了可以更有效的编译,会从10000次的方法调用中获取信息。在client模式的JVM中,默认值是1500次。当分层编译启用的时候,该选项会被忽略。
-XX:+DoEscapeAnalysis启用逃逸分析。该选项默认启用。使用-XX:-DoEscapeAnalysis来禁用。只有Java HotSpot Server VM支持该选项。
-XX:+Inline启用方法内联。该选项默认启用以提高性能。可以使用-XX:-Inline关闭方法内联。
-XX:InlineSmallCode=size设置会被内联优化方法的最大大小,默认单位是字节,可以追加单位,如k\K\m\M\g\G,只有小于该值的方法才会被内联优化。默认值是1000字节。
-XX:+PrintAssembly启用该选项后,会使用外部库disassembler.so打印字节码和本地代码的集合。你可以通过这个选项看到生成的代码,从而找到性能问题。该选项默认关闭,通常与-XX:UnlockDiagnosticVMOptions选项一起使用。

高级可靠性选项

参数说明
-XX:+HeapDumpOnOutOfMemory启动该选项后,当java.lang.OutOfMemoryError错误发生后,会在当前文件夹产生一个HPROF类型的Java堆转储文件。可以使用-XX:HeapDumpPath选项显式的指定堆转储文件的路径。该选项默认关闭。

高级垃圾回收选项

参数说明
-XX:+AggressiveHeap启动Java堆优化。根据计算机的配置(RAM和CPU),这个选项会设置各种参数,使其适用于长时间运行且对内存分配比较频繁的应用。该选项默认关闭。
-XX:CMSInitiatingOccupancyFraction=percent设置启动当老年代占用多少百分比的时候,CMS垃圾回收会启动。默认值设置为-1。任何负值(包括默认值)都意味着会使用-XX:CMSTriggerRatio用于定义初始百分比的值。
-XX:CMSTriggerRatio=percent设置由-XX:MinHeapFreeRatio选项指定的在CMS垃圾回收之前百分比的值(0-100),默认是80%。
-XX:ConcGCThreads=threads设置用于并行GC的线程数。默认值是JVM可用的CPU核数。
-XX:+DisableExplicitGC启动该选项会禁止应用中调用System.gc()方法。默认禁用,意味着应用中可以显式的调用System.gc()
-XX:G1HeapRegionSize=size设置当使用G1垃圾收集器的时候,每个区域的值。这个值的取值范围是1M到32M之间。默认的区域大小由堆的大小自动决定。
-XX:+G1PrintHeapRegions启用打印G1垃圾收集器区域分配和回收的信息。该选项默认禁用。
-XX:InitialHeapSize=size设置堆的初始值。默认值在运行时根据系统配置生成。具体可以参考Java虚拟机GC优化指南
XX:InitialSurvivorRatio=ratio设置幸存区的初始比例,如果使用追求吞吐量的垃圾收集器,比如使用-XX:+UseParallelGC-XX:+UseParallelOldGC指令,那么应用会使用当前初始比例启动,并且在运行期间,根据应用的使用情况,自动调整幸存区的比例。如果自适应功能通过-XX:-UseAdaptiveSizePolicy关闭,那么应该使用-XX:SurvivorRatio选项指定整个应用运行期间的幸存区大小。
下面的公式可以根据年轻代的大小(Y)计算幸存区的初始大小(S),初始幸存区的比例(R)。
S=Y/(R+2)
公式中的2代表两个幸存区域。幸存区初始化比例的值越大,幸存区的空间大小越小。
幸存区比例的初始化默认值是8。如果年轻代的大小是2M,则初始化的幸存区大小是0.2M。
-XX:InitiatingHeapOccupancyPercent=percent设置堆占用多少百分比的时候,会启动并行GC循环。这个值用来设置当占用整个堆多少百分比的时候,垃圾收集器会触发一次并行GC循环。默认值是45%。0意味着一个不停歇的GC循环。
XX:MaxGCPauseMillis=time设置一个最大GC停顿的期望时间,单位毫秒。这是一个软目标,JVM会尽力实现这个目标。默认没有最大期望停顿时间。
-XX:MaxHeapSize=size设置堆分配的最大值,单位字节。这个值必须要大于2M。默认值是在运行时根据系统配置来定。作为生产服务的部署,通常-XX:InitialHeapSize-XX:MaxHeapSize选项指定为相同的值。具体可以参考Java虚拟机垃圾回收优化指南
-XX:MaxHeapFreeRatio=percent设置一次GC之后允许堆的最大空闲百分比(0 到 100)。如果空闲的堆空间大于这个值,那么堆的空间会被缩小。默认值是70%。
-XX:MaxMetaspaceSize=size设置元空间的最大内存值。默认该值不做限制,仅仅受限于系统分配给应用的可用物理内存。
-XX:MaxNewSize=size设置年轻代的最大值,单位字节。默认会自动根据最优性能来选择。
-XX:MaxTenuringThreshold=threshold设置自适应GC大小的最大占用阀值。最大值是15。吞吐量优先(并行)的垃圾收集器默认值是15,CMS垃圾收集器默认是6。
-XX:MetaspaceSize=size设置第一次触发GC的元空间大小。这个触发GC的阀值会根据元空间的使用量进行增加或减少。默认值由平台决定。
-XX:MinHeapFreeRatio=percent设置GC之后的最小允许的堆空闲百分比(0 到 100)。如果堆空闲空间低于该值,则堆空间会自动扩展。默认值是40%。
-XX:NewRatio=ratio设置年轻代和老年代的比例。默认值是2。
-XX:NewSize=size设置初始年轻代的大小,单位字节。年轻代区域用来保存新对象。这个区域的GC会比其它区域要频繁。如果年轻代设置的太小,那么会有大量的minor gc发生。如果这个值设置的太大,那么只会有full gc发生,这会消耗很长的时间。Oracle建议年轻代设置为整个堆的四分之一到一半之间。
-XX:ParallelGCThreads=threads设置年轻代和老年代的parallel垃圾收集器可用线程数。默认值是JVM可用的CPU核数。
-XX:+PrintGC启用在每次GC的时候输出信息,默认关闭。
-XX:+PrintGCDetails启动在每次GC的时候输出详细日志。默认关闭。
-XX:+ScavengeBeforeFullGC启用每次full GC前执行一次年轻代GC。该选项默认启用。Oracle建议不要关闭该选项,因为在FULL GC之前清理年轻代可以减少从老年代到年轻代的可达对象数量。如果想禁用该选项,可以指定-XX:-ScavengeBeforeFullGC
-XX:SurvivorRatio=ratio设置伊甸园和幸存者空间的比例。默认值是8。
-XX:TargetSurvivorRatio=percent设置年轻代GC之后的幸存者空间的期望使用百分比(0 到100)。默认值是50%。
-XX:TLABSize=size设置线程分配(TLAB)的初始大小,单位字节。如果该选项设置为0,那么JVM会自动选择初始大小。
-XX:+UseAdaptiveSizePolicy启用自适应分代大小。该选项默认启用。若要关闭该功能,指定-XX:-UseAdaptiveSizePolicy并且明确设置可用的内存大小(参考-XX:SurvivorRatio选项)。
-XX:+UseCMSInitiatingOccupancyOnly启用该选项后,占用空间的大小是CMS垃圾收集器初始化时候的唯一判定标准,该选项默认禁用。
-XX:+UseConcMarkSweepGC使老年代使用CMS垃圾回收器。Oracle建议当吞吐量优先的垃圾收集器(-XX:+UseParallelGC)无法满足应用延迟需求的时候,使用CMS垃圾收集器。G1垃圾收集器是另外一种选择。
这个选项默认禁用,垃圾收集器会根据机器的配置和JVM的类型来自动选择。当这个选项启用的时候,-XX:+UseParNewGC选项会自动启用,并且不应该去禁用它,因为下列的组合选项在JDK8里面被废弃了:-XX:+UseConcMarkSweepGC -XX:-UseParNewGC
-XX:+UseG1GC启用G1垃圾收集器。这是一个服务器类型的垃圾收集器,是为了具有多核处理器和大内存的服务器。G1垃圾收集器很大概率满足GC的停顿时间要求,同时保持一个很好的吞吐量。G1垃圾收集器适合那些具有超大堆空间(6GB左右或更多)且对GC延迟需求很高(低于0.5秒的稳定且可预测的暂停时间)的应用。
该选项默认禁用,垃圾收集器会根据机器配置和JVM类型来自动选择。
-XX:+UseGCOverheadLimit启用该选项后,会限制GC的时间,如果GC时间超过限制,则会抛出OutOfMemoryError异常。这个选项默认启用,如果大于98%的本地时间都用来进行垃圾收集,且只有小于2%的堆被释放,parallel垃圾收集器会抛出OutOfMemoryError异常。可以通过-XX:-UseGCOverheadLimit选项关闭该功能。
-XX:+UseNUMA启用该选项后,应用可以在具有NUMA架构的主机上使用低延迟的内存,从而优化应用性能。该选项默认禁用,无任何NUMA优化。只有当指定-XX:+UseParallelGC的时候,该选项才有效。
-XX:+UseParallelGC启用并行垃圾收集器,该收集器也常被称为吞吐量优先的垃圾收集器,该收集器会使用多个处理器来提升性能。
默认该选项禁用,垃圾收集器会根据机器配置和JVM类型来自动选择。如果选项启用,那么-XX:+UseParallelOldGC选项也会自动启用,除非你显式的禁用掉它。
-XX:+UseParallelOldGC在老年代启用并行GC。默认禁用。
-XX:+UseParNewGC为年轻代启用并行GC。该选项默认禁用。当设置-XX:+UseConcMarkSweepGC选项的时候,该选项会自动启用。使用该选项的同时不指定-XX:+UseConcMarkSweepGC选项在JDK8中被废弃掉了。
-XX:+UseSerialGC启用串行GC。串行GC最适合小而简单的应用,不需要垃圾回收的特定功能。该选项默认禁用,垃圾回收器会根据机器配置和JVM类型自动选择。
-XX:+UseSHM在Linux系统中,启用该选项JVM会使用共享内存来设置巨页。
-XX:+UseTLAB在年轻代启用线程本地分配(TLABs)。这个选项默认启用。指定-XX:-UseTLAB来禁用该选项。
文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览146047 人正在系统学习中

标签:选项,设置,收集器,虚拟机,默认,XX,参数,JVM,GC
From: https://www.cnblogs.com/jinanxiaolaohu/p/18207563

相关文章

  • R语言电影数据分析:随机森林探索电影受欢迎程度因素、参数调优可视化
    全文链接:https://tecdat.cn/?p=34495原文出处:拓端数据部落公众号是什么让一个电影受欢迎?也许是影片的总收入(影院条目和DVDsellings)。我们选择的变量将是票房(gross)或观众评分(movie_facebook_likes)。众所周知,关于IMDB和番茄的好评与高收益的电影有关。我们的分析旨在回答以下研......
  • 在VMware Workstation虚拟机中利用Nvidia显卡的硬件加速功能
    研究了一下,在VMwareWorkstation虚拟机中利用Nvidia显卡的硬件加速功能,以下是详细的操作步骤:1.检查硬件和软件兼容性确认Nvidia显卡兼容性:访问Nvidia的官方网站,查阅支持列表,确认显卡型号支持虚拟机直通(Pass-Through)技术。https://developer.nvidia.com/zh-cn/cuda-gpusVMwar......
  • 可视化学习:使用极坐标参数方程和SDF绘制有趣的图案
    前言本文将介绍如何使用极坐标参数方程和上一篇文章提到的距离场SDF来绘制有趣的图案。说到曲线和几何图形的绘制,我们知道图形系统默认支持的是通过直角坐标绘制,但是有些曲线呢,不太容易使用直角坐标系来表示,却可以很方便地使用极坐标来表示,这个时候我们可以选择通过极坐标和直角......
  • linux kvm 给虚拟机增加磁盘
    目录linuxkvm给虚拟机增加磁盘查看当前磁盘确认当前虚拟机的虚拟磁盘位置手动创建虚拟磁盘将虚拟磁盘加到虚拟机里重启虚拟机并确认linuxkvm给虚拟机增加磁盘虚拟机磁盘不够了,需要当前的宿主机划分100G给虚拟机dameng-8-65查看当前磁盘//登陆宿主机,查看宿主机当前磁盘......
  • linux kvm 给虚拟机重置密码
    目录linuxkvm给虚拟机重置密码安装工具生成新密码替换虚拟机的账号密码linuxkvm给虚拟机重置密码kvm上有众多虚拟机,有的虚拟机时间太久,密码忘记了,怎么给这些虚拟机重置密码呢安装工具//安装虚拟机客户端管理工具,这个一般在kvm的机器上都有安装,检查没有的话就安装一个rp......
  • 「云渲染课堂」3dmax地砖材质参数怎么让画面更加真实?
    在3DMAX中,地砖材质的渲染需要细致的调整,因为不同材质的地砖在反射和折射参数上各不相同。为了使地砖材质更加逼真,以下简要说明了一些设置方法,希望对大家有所帮助!3dmax地砖材质参数如何设置1、打开材质编辑器,添加一个VRay标准材质并点击【确定】后选择对象。2.将材质赋予对象......
  • 关于测量设备的一些参数
    RG的含义RG的含义是“Range”(量程),表示的是整个测量范围的百分比。例如量程为1000V,误差为1000V的0.01%即0.1V;这意味着无论当前的读数是多少,误差都是固定的,相对于量程的百分比,无论电压为500V,还是800V,误差都是0.1V;RD的含义RD的含义是“Reading”(读数),表示的是测量误差与实际......
  • Asp-Net-Core开发笔记:使用ActionFilterAttribute实现非侵入式的参数校验
    前言#在现代应用开发中,确保API的安全性和可靠性至关重要。面向切面编程(AOP)通过将横切关注点(如验证、日志记录、异常处理)与核心业务逻辑分离,极大地提升了代码的模块化和可维护性。在ASP.NETCore中,利用ActionFilterAttribute可以方便地实现AOP的理念,能够以简洁、高效的方式进行......
  • springboot 请求前自动给 参数的某个属性赋值
     springboot请求前自动给参数的某个属性赋值在SpringBoot中,可以通过自定义HandlerMethodArgumentResolver来在请求处理方法前自动给参数的某个属性赋值。以下是一个简单的例子:创建一个自定义注解来标记需要自动赋值的参数:  @Target(ElementType.PARA......
  • 通过Ubuntu虚拟机+Linux移植LVGL并通过linux Frame buffer显示
    文章参考:https://gitee.com/socbis/linux-lvgllvglonlinuxFramebuffer主机环境:Ubuntu18.04lvgl8.0.1获取源码并运行demo获取源码需要3样东西来构建demo:lvgl核心控件库:从此处获取源码lvgl,选择版本Releasev8.0.1.显示和触摸接口层:关联图形库与硬件,源......