JDK-8中的JAVA_OPTS通常用于传递给JVM的启动参数

在JDK 8中,JAVA_OPTS通常用于传递给JVM的启动参数。以下是一些常见的JAVA_OPTS项及其说明:

  1. 内存管理
    -Xms:设置Java堆的初始大小,例如 -Xms512m。
    -Xmx:设置Java堆的最大大小,例如 -Xmx1024m。
    -Xmn:设置年轻代的大小。
    -XX:PermSize=size:设置永久代的初始大小(在JDK 8中被Metaspace取代,但可以使用此选项)。
    -XX:MaxPermSize=size:设置永久代的最大大小(在JDK 8中被Metaspace取代)。

  2. 垃圾回收
    -XX:+UseSerialGC:使用串行垃圾回收器。
    -XX:+UseParallelGC:使用Parallel垃圾回收器。
    -XX:+UseConcMarkSweepGC:使用CMS垃圾回收器。
    -XX:+UseG1GC:使用G1垃圾回收器。
    -XX:MaxGCPauseMillis=:设置最大垃圾回收停顿时间。

  3. 其他JVM选项
    -D=:设置系统属性,如 -Dfile.encoding=UTF-8。
    -XX:+PrintGCDetails:打印详细的GC日志。
    -XX:+PrintGCDateStamps:在GC日志中添加时间戳。
    -XX:HeapDumpOnOutOfMemoryError:在发生OOM时生成堆转储文件。

  4. 调试信息
    -Xdebug:启用调试。
    -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=*:5005:设置远程调试参数。

  5. 其他有用的选项
    -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 的用法

  1. 默认行为:
    默认情况下,Java虚拟机会使用JIT编译器(javac),在运行时将热点代码从字节码编译为本地机器代码,以提高性能。
  2. 禁用JIT编译器:
    使用 -Djava.compiler=NONE 参数可以禁用JIT编译,从而使Java程序完全以解释模式运行。这通常用于性能分析或调试,可帮助开发者了解程序在不经过JIT优化时的性能表现。
java -Djava.compiler=NONE -jar your_application.jar
  1. 特定的编译器:
    在某些情况下,你可以指定其他编译器(如 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 的使用情况

  1. 性能优化:
    在server模式下,JVM会启用一些优化机制(如更复杂的JIT编译器优化),以提高长期运行应用程序的性能。
    server模式适用于CPU密集型的应用,能够有效利用JIT编译以提升性能。
  2. 示例:
    启动Java应用程序时,可以加上 -server 参数,如下所示:
java -server -jar your_application.jar
  1. 与client模式比较:
    client模式(默认在较早版本的JDK上启用)主要针对快速启动和较低的内存使用,它同样会进行一定程度的编译,但优化程度不及server模式。
    从JDK 8开始,默认情况下没有client模式,所有模式都使用server模式。

总结

使用 -server 参数可以有效提高某些Java应用的执行效率,特别是需要长时间运行或高负荷的服务器端应用。

-Dserver.name

-Dserver.name 是一个用于设置系统属性的JVM启动参数。通过这个参数,你可以给Java应用程序指定一个名为 server.name 的属性值。这个属性通常用于在应用程序内部访问和使用。

使用示例

  1. 设置属性:
    你可以在启动Java程序时通过该参数设置server.name属性。例如:
java -Dserver.name=myServer -jar your_application.jar
  1. 访问属性:
    在你的Java代码中,可以使用 System.getProperty() 方法来访问这个属性。例如:
String serverName = System.getProperty("server.name");
System.out.println("Server Name: " + serverName);
  1. 常用场景:
    分布式系统:在微服务架构中,可能会用来标识不同服务实例的名称。
    配置:可以在应用程序中根据环境设置不同的属性值,比如开发、测试和生产环境。

注意事项

确保在启动时传递的属性名和值符合你的应用逻辑。
可以使用多个 -D 参数来设置多个系统属性,例如:

java -Dserver.name=myServer -Ddb.host=localhost -Ddb.port=3306 -jar your_application.jar
posted @ 2024-12-25 14:57  codetodo  阅读(343)  评论(0)    收藏  举报