前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JVM Advanced Runtime Options

JVM Advanced Runtime Options

作者头像
邹志全
发布2020-02-25 16:28:24
8970
发布2020-02-25 16:28:24
举报
文章被收录于专栏:EffectiveCodingEffectiveCoding

高级运行时选项(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 允许使用信号处理器,默认为不开启。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档