java启动命令详解
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8002 -server -Xms4g -Xmx6g -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/data/dump.bin -Dfile.encoding=UTF-8 -Djava.awt.headless=true -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:G1HeapRegionSize=16m -XX:NewRatio=4 -XX:InitiatingHeapOccupancyPercent=45 -XX:ParallelGCThreads=8 -XX:ConcGCThreads=4 -Xshare:off org.springframework.boot.loader.JarLauncher -Dprojectname=gikam -Dlog4j2.formatMsgNoLookups=true &
各部分分析
-
Java 启动命令
java
: 启动 Java 虚拟机的命令。
-
调试代理
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8002
:- -agentlib:jdwp: 启用 Java 调试接口 (JDWP)。
- transport=dt_socket: 使用 socket 传输协议。
- server=y: 作为调试服务器启动。
- suspend=n: 启动后不等待调试器连接。
- address=8002: 监听的端口号为 8002。
-
JVM 选项
-server
: 使用服务器模式优化性能,适合长期运行的应用。-Xms4g
: 设置初始堆内存为 4GB。-Xmx6g
: 设置最大堆内存为 6GB。-XX:+HeapDumpOnOutOfMemoryError
: 在发生内存溢出错误时生成堆转储文件。-XX:HeapDumpPath=/data/data/dump.bin
: 指定堆转储文件的存储路径。-Dfile.encoding=UTF-8
: 设置文件编码为 UTF-8。-Djava.awt.headless=true
: 在无图形环境下运行 Java AWT(用于图形界面)应用。-XX:+UseG1GC
: 启用 G1 垃圾收集器,适合大内存的应用。-XX:MaxGCPauseMillis=200
: 最大垃圾回收暂停时间为 200 毫秒。-XX:G1HeapRegionSize=16m
: G1 垃圾收集器中每个堆区域的大小为 16MB。-XX:NewRatio=4
: 设置新生代与老年代的比例,表示新生代的大小为总堆的 1/5。-XX:InitiatingHeapOccupancyPercent=45
: 当堆内存占用达到 45% 时开始进行并行垃圾回收。-XX:ParallelGCThreads=8
: 设置并行垃圾回收线程数为 8。-XX:ConcGCThreads=4
: 设置并发垃圾回收线程数为 4。-Xshare:off
: 禁用类数据共享 (CDS)。
-
Java 应用程序入口
org.springframework.boot.loader.JarLauncher
: 指定应用程序的入口类,通常是 Spring Boot 应用程序的启动类。
-
系统属性
-Dprojectname=gikam
: 设置名为projectname
的系统属性,其值为gikam
,可以在代码中通过System.getProperty("projectname")
获取。-Dlog4j2.formatMsgNoLookups=true
: 在 Log4j2 中启用格式化消息的安全设置,防止查找敏感信息(Log4j2 漏洞修复)。
-
后台运行
&
: 将该命令放入后台运行,使得终端可以继续使用。
总结
这条命令设置了一个相对复杂的 Java 应用程序的运行环境,适用于高性能和稳定性要求的生产环境。通过合理配置堆内存、垃圾回收策略和调试参数,能够有效地提高应用程序的性能并减少内存管理上的问题。同时,它也考虑到了安全性,特别是在处理 Log4j2 的消息格式时。