专栏首页EffectiveCodingJVM Advanced Runtime Options

JVM Advanced Runtime Options

高级运行时选项(Advanced Runtime Options): -XX:+UnlockCommercialFeatures 开启商业选项,许多商业特性都需要这个选项的支持。 -XX:+CheckEndorsedAndExtDirs jdk 8中新增加的一个参数,有兴趣的可以去看看openjdk中的关于这一块的实现(http://hg.openjdk.java.net/jdk8u/hs-dev/hotspot/rev/fa6adc194d48) 这个参数是用来阻止Java 命令运行应用(除非没有用到endorsed-standards override机制&扩展机制)。 同时,这个选项会检查应用是否启动了以下机制 1、java.ext.dirs 或 java.endorsed.dirs 属性被设置 2、lib/endorsed 目录存在 && 不为空 3、lib/ext 目录下包含了除JDK以外的JAR 4、系统范围内 特定于平台的扩展目录中包含任何JAR文件 -XX:+DisableAttachMechanism 启动此参数之后,JVM将禁止任何工具连接,通常情况下这个选项是关闭的。外部工具指的是 jstack、jmap、jinfo等JVM辅助分析工具。 -XX:ErrorFile=filename 用于当出现致命错误时,指定一个目录,用来存储Error信息。默认为当前目录下的hs_err_pidpid.log,也就是 filename=./hs_err_pidpid.log -XX:+FailOverToOldVerifier 当新的类型检查失败时,自动使用老的验证器。默认这个是关闭的,但是当我们需要时使用老版本的字节码的时候则需要开启这个选项。 -XX:+FilghtRecorder 嗯。Java 就是性能记录。这是一个商业特性,和 -XX:+UnlockCommercialFeatures 选项一起使用如果这个选项开启了,那么JVM的性能记录是不可用的。 -XX:-FilghtRecorder 嗯,又是性能记录。关闭了 -XX:FilghtRecorderOptions={ parameter=value、 defaultrecording={true|false}、 disk={true|false}、 dumponexit={true|false}、 dumponexitpath=path、 globalbuffersize=size loglevel={quiet|error|warning|info|debug|trace} maxage=time maxchunksize=size maxsize=size repository=path samplethreads={true|false} settings=path stackdepth=depth threadbuffersize=size } defaultrecording: 指定是否在后台一只记录还是只运行一段时间,默认这个参数的值是false。如果要一直开启,请设置为true。 disk:是否JRE持续的把记录写到硬盘中,默认false,如果想要持续记录,需要设置为true。 dumponexit:是否在JVM终止的时候记录JFE的数据 dumponexitpath:JVM终止是记录JFE的数据的路径,如果指定的是一个目录 JVM会自动创建一个文件(文件名一般是以当前时间生成),若是文件名,如果这个文件名已经存在了,通常会加一个时间后缀来区分。这个参数如果不生效,上一个参数的选项也是不成立的 globalbuffersize=size:指定保留数据的总大小。 loglevel:JFE日志的日志级别,默认 Info maxage:设置数据对大的保留时间 maxchunksize=size:设置数据最大块的大小 maxsize=size:设置数据在硬盘的最大容量,默认容量没有限制,前提:仅当disk=true时,此选项可用。 respository=path:设置临时仓库,默认使用系统的临时路径 samplethreads:设置是否进行线程抽样,默认为true setting=path:设置事件配置文件,默认是使用JAVA_HOME/jre/lib/default.jfc stackdepth=depth:设置对应栈追踪的深度,默认深度为64 threadbuffersize=size:指定每个线程的本地缓冲的大小,默认大小为5k

-XX:LargePageSizeInBytes=size 设置内存页的大小,但是注意,在Solaris上这个参数应该为2的幂。并且可以使用后缀单位,默认值为0,JVM自动选择大小。 -XX:MaxDirectMemorySize=size 设置直接内存的最大容量(NIO),这一点需要注意一下,尤其是项目中经常存在IO操作时。 有时候NIO用起来,异常坑。 -XX:NativeMemoryTracking={ off、summary、detail } 指定追踪JVM本地方法使用的模式, off:不跟踪本地方法的使用,这是默认的模式 summary:仅仅追踪JVM子系统的内存使用,比如java 堆,类,代码,线程 detail:除了跟踪内存使用的JVM子系统,通过单个调用callSite跟踪内存使用量、单个虚拟机区域&其委托区域 -XX:ObjectAlignmentInBytes=alignment 设置Java 对象的内存对齐,默认为8字节,制定值必须为2的幂,且必须在8~256之间。 没想到吧,这个竟然也能改 -XX:OnError=string 设置自定义的命令(使用逗号分隔),当发生致命错误时被执行 -XX:OnOutOfMemoryError=string 当发生OOM时所执行的命令 -XX:+PerfDataSaveToFile 在退出时保存jstat的二进制数据,名称:hsperfdata_。 当然也可以在jstat 保存数据 -XX:+PrintCommandLineFlags 输出JVM设置的选项和值,默认关闭 -XX:+PrintNMTStatistics 如果-XX:NativeMemoryTracking选线开启,那么这个选项会在JVM退出时打印本地内存的手机数据。默认关闭 -XX:+RelaxAccessControlCheck 较少访问控制检查,默认关闭 -XX:+ResourceManagement 在运行期间,启动资源管理 这是个商业特性,如果需要使用的话需要开启-XX:+UnlockCommercialFeatures -XX:ResourceManagementSampleInterval=value (milliseconds) 设置资源管理的采样间隔,只有启动采样时这个选项才有作用(-XX:+RecourseManagement) -XX:SharedArchiveFile=path 指定类数据分享文档目录 -XX:SharedClassListFile=file_name 指定一个文本文件,其中包含要存储到类共享文档中的类名。并且在命名规则中可以使用’/’替代’.’ 这些在文件中指定的类是被经常使用的类。 -XX:+ShowMessageBoxOnError 当JVM出现致命错误时,弹出一Msg 阻止JVM的退出。这时候我们可以使用JVM的外部调试工具连接JVM来查看对应的原因。这个在JVM排错时比较有用,尤其是无法直观获得错误原因时。默认关闭 -XX:StartFlightRecording={ parameter=value、 compress={true|false}、 defaultrecording={true|false}、 delay=time、 dumponexit={true|false}、 duration=time、 filename=path、 name=identifier、 maxage=time、 maxsize=size、 settings=path } 开启性能记录选项,这是一个商业特性同样的需要开启-XX:+UnlockCommercialFeatures,监控&后期分析JVM行为是比较有用的。 compress:是否执行压缩操作 defaultrecording:持续开启,还是只开一段时间。设置为true 时是持续开启的 delay:开启JVM后多久开始性能记录,默认值为0,即马上开始记录 dumponexit:在退出时是否产生性能记录 duration:性能记录的执行时长 filename:JFR记录的文件&路径 name:指定JFR记录的标示 maxage:性能记录的保存时间 setting=path:设置事件配置文件,默认是使用JAVA_HOME/jre/lib/default.jfc 以上为性能记录的启动参数选项,跟-XX:FilghtRecorderOptions参数的选项很多重复项,其实说的就是一个东西,一个是性能记录的基础的参数设置,一个是启动时设定罢了 -XX:ThreadStackSize=size 设置线程栈的深度或者大小。 之前有一个非标准参数 -Xss 和这个功能是相同的 -XX:+TraceClassLoading -XX:+TraceClassLoadingPreorder -XX:+TraceClassResolution -XX:+TraceClassUnloading -XX:+TraceLoaderConstraints 以上都为JVM的跟踪行为,只不过每一项指定的跟踪项不同 Loading 为类加载跟踪 LoadingPreorder 按照引用顺序跟踪类加载 Resolution 跟踪常量池行为 Unloading 跟踪类的卸载行为 LoaderConstraints 跟踪类加载器的约束行为 -XX:+UseAltSigs

-XX:+UseAppCDS 这也是个商业特性,同样需要开启-XX:+UnlockCommercialFeatures。 UseAppCDS属于体验特性,将来应该会发生变化。 作用:启动应用类数据共享(AppCDS),为了使用AppCDS,必须制定-XX:SharedClassListFile和-XX:SharedArchiveFile 两个选项。 -XX:-UseBiasedLocking 禁止使用偏向锁,这个还是经常使用的。 -XX:-UseCompressedOops 这个选项只用在64位操作系统下使用,默认压缩指针开启的。 当开启时,对象引用是32位的而不是64位,能够减少内存的使用。 -XX:+UseHugeTLBFS 在Linux中,这个选项相当于指定- xx:+ UseLargePages。实验特性,默认情况下是禁用的。此选项预先分配所有大页面,当内存保留时;因此,JVM不能动态地增长或缩小大页内存区域;看到- xx:UseTransparentHugePages如果你想要这种行为。 -XX:+UseLargePages 启动大的内存分页,默认关闭 -XX:+UseMembar 在线程转换时使用内存栅栏,默认关闭。 -XX:+UsePerfData 使用PerfData特性,默认开启 -XX:+UseTransparentHugePages 在Linux 中,允许使用动态增长或者扩展的页面。 算是实验特性,默认是被禁用的,因为当操作系统移动其他页面以创建巨大的页面时,可能会遇到巨大页面创建的性能问题。 -XX:+AllowUserSignalHandlers 允许使用信号处理器,默认为不开启。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • JVM Advanced Serviceability Options

    Advanced Serviceability Options 这个系列的参数其实就是用来问题发生时来打印详细信息帮助分析的。 -XX:+ExtendedD...

    邹志全
  • JVM Advanced JIT Compiler Options

    JIT相关编译选项 Advanced JIT Compiler Options -XX:+AggressiveOpts 最核心的应该是加快编译,在JDK 6...

    邹志全
  • 为 Kotlin 项目设置编译选项

    经常用终端的人都知道,终端命令有很多选项可以指定,这里我们以相关的kotlinc为例,我们可以在终端这样指定选项

    技术小黑屋
  • JVM 参数列表

    这一篇说一下JVM 参数相关,首先JVM参数中包含着么几类 标准参数(Standard)、非标准参数(Non-Standard)、高级运行时选项、JIT相关编译...

    邹志全
  • 使用Opatch工具应用过渡性Patch

    很多时候,在推出一个完整的补丁集之前,Oracle会依据Bug的严重程度发布一些过渡性或临时性Patch,修正一些Bug。 这些Patch通常没有setup安装...

    数据和云01
  • Awesome Java - 2017 Java 资源大合集

    A curated list of awesome Java frameworks, libraries and software.

    大数据工程师-公子
  • 2019-08-17 awesome-java,JAVA开发的武器库

    A curated list of awesome Java frameworks, libraries and software.

    Albert陈凯
  • loadrunner 脚本开发-基本知识

    自动补全输入Tools->General Options->Environment->Auto complete word

    授客
  • docker中部署hadoop、zookeeper、hbase伪分布式并上传到阿里云远程仓库

    docker有一点好处就是,一次完成,处处运行,所以此次并非直接在centos系统上直接运行hadoop,而是在docker容器(container)里进行安装...

    gzq大数据
  • JVM Non-Standard Options

    准备对每一个参数进行详细的介绍,并且给出一些我所了解到的小技巧。 懂原理才能更好的使用嘛,推荐大家先把Java 使用熟练,然后好好看看JVM 原理相关的东西,...

    邹志全
  • 远程Debug Java进程的方法

    远程debug的意思是启动一个Java进程,启动一个debugger进程,将两者连接起来,利用debugger来debug Java进程。

    颇忒脱
  • MSSQL利用总结

    由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测以及文章作者不为此承担任何责任。 雷神众测拥有对此文章的修改和...

    安恒网络空间安全讲武堂
  • python 脚本生成为可执行文件

    你会发现dist下面只有一个可执行文件,这个单文件就可以发布了,可以运行在你正在使用的操作系统类似的系统的下面。

    Devops海洋的渔夫
  • Jacoco探针源码解析(0.8.5 版本)

    入口类—PreMain 通过 agent 参数和命令行配置,通过 JVM 初始化 agent 时调用,使得 javaagent 得以在 JVM 启动后,应用启动...

    JavaEdge
  • LoadRunner11-遇到问题及解决办法

    Java学习123
  • SQLServer:用户自定义数据类型用法

    今天给大家梳理一下SQLServer:用户自定义数据类型用法,希望对大家能有所帮助!

    IT技术分享社区
  • SQLServer:用户自定义数据类型用法

    今天给大家梳理一下SQLServer:用户自定义数据类型用法,希望对大家能有所帮助!

    IT技术分享社区
  • LoadRunner11-遇到问题及解决办法

    1、LoadRunner超时错误:在录制Web服务器端,如果超过120秒服务器协议脚本回放时超时情况经常出现,产生错误的原因也有很多,解决的方法也不同。

    Meccer
  • tomcat中JVM内存分配简单实现

      如果JSP程序在操作大量数据时可能会出现这种错误:java.lang.OutOfMemoryError: Java heap space。

    the5fire

扫码关注云+社区

领取腾讯云代金券