JDK-8中的JAVA_OPTS通常用于传递给JVM的启动参数
在JDK 8中,JAVA_OPTS通常用于传递给JVM的启动参数。以下是一些常见的JAVA_OPTS项及其说明:
-
内存管理
-Xms:设置Java堆的初始大小,例如 -Xms512m。
-Xmx:设置Java堆的最大大小,例如 -Xmx1024m。
-Xmn:设置年轻代的大小。
-XX:PermSize=size:设置永久代的初始大小(在JDK 8中被Metaspace取代,但可以使用此选项)。
-XX:MaxPermSize=size:设置永久代的最大大小(在JDK 8中被Metaspace取代)。 -
垃圾回收
-XX:+UseSerialGC:使用串行垃圾回收器。
-XX:+UseParallelGC:使用Parallel垃圾回收器。
-XX:+UseConcMarkSweepGC:使用CMS垃圾回收器。
-XX:+UseG1GC:使用G1垃圾回收器。
-XX:MaxGCPauseMillis=:设置最大垃圾回收停顿时间。 -
其他JVM选项
-D= :设置系统属性,如 -Dfile.encoding=UTF-8。
-XX:+PrintGCDetails:打印详细的GC日志。
-XX:+PrintGCDateStamps:在GC日志中添加时间戳。
-XX:HeapDumpOnOutOfMemoryError:在发生OOM时生成堆转储文件。 -
调试信息
-Xdebug:启用调试。
-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=*:5005:设置远程调试参数。 -
其他有用的选项
-XX:+UseCompressedOops:启用压缩指针,节省内存(适用于64位JVM)。
-Djava.awt.headless=true:在无头模式下运行Java应用程序(适用于图形界面不需要的场景)。
-Xloggc:gc.log
- 功能:此参数用于指定垃圾回收日志的输出文件。所有的垃圾回收活动详细信息将会记录到名为gc.log的文件中。
- 用法示例:在启动Java应用时,可以这样设置:
java -Xloggc:gc.log -jar your_application.jar
- 注意:你也可以通过其他参数来控制日志的详细程度,例如:
-XX:+PrintGCDetails:打印垃圾回收的详细信息。
-XX:+PrintGCDateStamps:在输出的GC日志中添加时间戳。
-Djava.compiler 的用法
- 默认行为:
默认情况下,Java虚拟机会使用JIT编译器(javac),在运行时将热点代码从字节码编译为本地机器代码,以提高性能。 - 禁用JIT编译器:
使用 -Djava.compiler=NONE 参数可以禁用JIT编译,从而使Java程序完全以解释模式运行。这通常用于性能分析或调试,可帮助开发者了解程序在不经过JIT优化时的性能表现。
java -Djava.compiler=NONE -jar your_application.jar
- 特定的编译器:
在某些情况下,你可以指定其他编译器(如 javac),但这通常不常见且依赖于具体的JVM实现。
示例
如果你希望禁用JIT编译器,可以在启动Java应用程序时输入:
java -Djava.compiler=NONE -Xloggc:gc.log -jar your_application.jar
影响
性能:禁用JIT可能导致性能下降,因为程序将无法利用即时编译的优势。
调试:有助于识别因JIT优化而导致的问题。
-server
-server 是一个JVM启动参数,用于告诉Java虚拟机以"server"模式运行。这个模式与默认的"client"模式相比,优化了JVM的性能,特别适合需要长时间运行的服务器应用。
-server 的使用情况
- 性能优化:
在server模式下,JVM会启用一些优化机制(如更复杂的JIT编译器优化),以提高长期运行应用程序的性能。
server模式适用于CPU密集型的应用,能够有效利用JIT编译以提升性能。 - 示例:
启动Java应用程序时,可以加上 -server 参数,如下所示:
java -server -jar your_application.jar
- 与client模式比较:
client模式(默认在较早版本的JDK上启用)主要针对快速启动和较低的内存使用,它同样会进行一定程度的编译,但优化程度不及server模式。
从JDK 8开始,默认情况下没有client模式,所有模式都使用server模式。
总结
使用 -server 参数可以有效提高某些Java应用的执行效率,特别是需要长时间运行或高负荷的服务器端应用。
-Dserver.name
-Dserver.name 是一个用于设置系统属性的JVM启动参数。通过这个参数,你可以给Java应用程序指定一个名为 server.name 的属性值。这个属性通常用于在应用程序内部访问和使用。
使用示例
- 设置属性:
你可以在启动Java程序时通过该参数设置server.name属性。例如:
java -Dserver.name=myServer -jar your_application.jar
- 访问属性:
在你的Java代码中,可以使用 System.getProperty() 方法来访问这个属性。例如:
String serverName = System.getProperty("server.name");
System.out.println("Server Name: " + serverName);
- 常用场景:
分布式系统:在微服务架构中,可能会用来标识不同服务实例的名称。
配置:可以在应用程序中根据环境设置不同的属性值,比如开发、测试和生产环境。
注意事项
确保在启动时传递的属性名和值符合你的应用逻辑。
可以使用多个 -D 参数来设置多个系统属性,例如:
java -Dserver.name=myServer -Ddb.host=localhost -Ddb.port=3306 -jar your_application.jar
浙公网安备 33010602011771号