本篇继续讲解java tool常用的两个命令java - D与java -X
1.java -D
这个命令是设置系统属性,简单来说,我们设置的jdk的环境变量,和这个也是相同的道理,只不过那个是为了在电脑上设置属性,这个只是针对项目设置属性,下面是我使用的几个参数(图一),第一个showSettings就是为了展示我们设置的属性有哪些,PrintFlagsFinal 用于显示 JVM 的详细配置。FlightRecorder 是用于记录分析用的一个,第四个就是我设置的一个随机的属性,在图二就可以看到我们设置的lsv.test这个属性了,那么这个属性设置有什么用呢
a. 比如集成了nacos,可以在java命令行中设置启动参数
b. 设置一些属性的时候,在springboot的bean中可以通过 System.getenv() 获取到一些属性,设置bean的内容,当然这些都是一些基本的操作,笔者只是为了抛砖引玉,有其他用法,可以评论后我进行补充。
编辑
图一
编辑
图二
2. java -XX 和java -X
2.1 java -X (官方解释为Non-Standard Options)
2.1.1 -Xbatch
官网原文解释为:
这个命令其实就是在启动时使用什么编译,在第一篇文章中我们曾简单描述过编译模式,如果使用这个命令,那么就是禁用后台编辑,既不使用混合编译,但是其实,这个东西在jdk8中远不如后面版本优化的好,如springboot3.x之后支持的GraalVM静态编译,以及最近更新jdk21更是优化的更好。并且-Xbatch通常会和-Xcomp 一起使用。
2.1.2 -Xbootclasspath:path
官网原文解释为:
这个命令在官网中并不推荐使用,但是这并不影响笔者突然发散了一下思维。这个命令其实就是指定classpath,但是如果操作不当会导致我们覆盖运行时环境。不过从jdk9还是jdk10开始,可以自定义给jre 运行时环境进行瘦身,正常一个大概200M,但是有些东西我们根本用不到,所以之后的版本可以用,不过笔者没用过,只是简单看过官网,如果有朋友看过,同样可以评论,然后我补充到文章中
2.1.3 -Xbootclasspath/a:path
同2.1.2,只不过这个是追加而不是覆盖 a 笔者猜测则是 append
2.1.4 -Xbootclasspath/p:path
同2.1.2 ,只不过是优先使用命令指定的, p 笔者猜测是precedence
2.1.5 -Xcheck:jni
检查使用的外部函数接口格式是否正确,不正确jvm会停止,并且抛异常
2.1.6 -Xcomp
强制在第一次调用时编译方法。默认情况下,Client VM (-client)执行1,000次解释方法调用,Server VM (-server)执行10,000次解释方法调用,以收集信息以进行有效编译。指定-Xcomp选项将禁用解释方法调用,以牺牲效率来提高编译性能。
还可以使用-XX:CompileThreshold选项更改编译前解释方法调用的次数。
2.1.7 -Xdiag
在Java中,-Xdiag是一个诊断选项,用于启用诊断信息输出。具体来说,该选项会打印与虚拟机(JVM)诊断相关的信息,包括启动时加载的类、类加载器信息、系统属性、环境变量等。
2.1.8 -Xint
只用解释模式运行应用程序。本机代码的编译被禁用,所有字节码都由解释器执行。即时(JIT)编译器提供的性能优势在这种模式中不存在。
2.1.9 -Xinternalversion
显示比-version选项更详细的JVM版本信息,然后退出。
2.1.10 -Xloggc:filename
设置详细GC事件信息应该重定向到的文件,以便进行日志记录。写入该文件的信息类似于-verbose:gc的输出,其中包含自每个记录事件之前的第一个gc事件以来所经过的时间。如果使用相同的java命令给出-Xloggc选项,则-Xloggc选项将覆盖-verbose:gc。
例子:
-Xloggc: garbage-collection.log
2.1.11 -Xmaxjitcodesize=size
指定jit编译代码的最大代码缓存大小(以字节为单位)。附加字母k或k表示千字节,m或m表示兆字节,g或g表示千兆字节。默认最大代码缓存大小为240 MB;如果使用-XX:-TieredCompilation选项禁用分级编译,则默认大小为48 MB:
-Xmaxjitcodesize = 240
这个选项相当于-XX:ReservedCodeCacheSize。
2.1.12 -Xmixed
将所有的代码除了热点代码,都编辑成机器码指令。
使用-Xmixed选项的场景通常是在应用程序启动时希望迅速达到较高的性能水平,而不愿意等待所有代码都被完全编译的情况下。这对于交互性较强、启动时间敏感的应用程序可能会有一些优势。
剩下几个非标准的参数Xmx Xms 等需要更详细的介绍,这里只是简单提一下。剩下的就不在介绍,剩下的就是标准的-XX格式的启动参数了,会在下一篇文章中进行介绍