- Java常用启动参数
Java启动参数是用来配置Java虚拟机(JVM)行为和资源限制的重要手段。以下是Java常用启动参数及其作用的概述,按照参数类型分为标准参数、非标准参数(-X)和非稳定参数(-XX):
标准参数(-)
这些参数在所有JVM实现中都是标准的,确保了跨平台和向后兼容性。
1. -classpath 或 -cp:
指定类路径,用于查找用户类文件、库和其他资源。它定义了JVM在加载类时应搜索的目录列表和归档文件(如JAR文件)。
2. -jar:
指定包含主类的manifest的JAR文件,使JVM可以直接运行一个打包为JAR的应用程序。
3. -version:
显示Java运行时环境的版本信息。
4. -verbose:
提供额外的输出信息。可以与类、gc(垃圾收集)、jni(Java Native Interface)等子选项结合使用,如-verbose:class、-verbose:gc等,以获取特定领域的详细运行时信息。
5. -showversion:
类似于-version,但同时继续执行指定的Java应用程序。
6. -help:
输出Java命令行选项的帮助信息。
非标准参数(-X)
这些参数不是所有JVM实现都必须支持的,可能在不同JVM版本间存在差异,且不保证向后兼容。
1. -Xms:
设置JVM初始堆内存大小。即启动时为Java进程分配的最小堆内存。
2. -Xmx:
设置JVM最大堆内存大小。限制Java进程可以使用的最大堆内存。
3. -Xmn:
设置年轻代(Young Generation)的大小。调整新生代容量有助于优化垃圾收集性能。
4. -Xss:
设置每个线程的栈大小。影响每个Java线程可以使用的栈空间,对大量线程或深度递归场景尤为重要。
5. -Xlog 或 -Xloggc (取决于JVM版本):
用于启用详细的垃圾收集日志输出,通常配合文件路径指定日志输出位置。
6. -Xprof 或 -Xrunhprof (旧版JVM,已弃用):
启用简单的CPU分析器,提供基本的性能剖析信息。现代JVM通常建议使用专门的性能分析工具如JFR(Java Flight Recorder)和JMC(Java Mission Control)。
非稳定参数(-XX)
这些参数是高度特定于JVM实现的,可能随JVM版本变化而改变或移除,通常用于高级JVM调优。使用时需谨慎,并确保了解所用JVM版本的具体支持情况。
1. -XX:+/-OptionName:
非稳定参数通常以开关形式出现,前面加上+表示启用,-表示禁用。例如:
- -XX:+UseG1GC: 选择使用G1垃圾收集器。
- -XX:-UseConcMarkSweepGC: 禁用CMS垃圾收集器。
- -XX:NewRatio=: 设置老年代与年轻代的比例。
2. 垃圾收集器相关参数:
如-XX:SurvivorRatio=, -XX:MaxTenuringThreshold=, -XX:ParallelGCThreads=, -XX:ConcGCThreads= 等,用于精细调整特定垃圾收集器的行为和资源分配。
3. 内存管理相关参数:
如-XX:MetaspaceSize=, -XX:MaxMetaspaceSize=, -XX:CompressedClassSpaceSize=, -XX:InitialRAMFraction=, -XX:MinRAMFraction=, -XX:MaxRAMFraction= 等,用于控制元空间、压缩类空间等非堆内存区域以及基于系统总内存的资源分配策略。
4. 性能监控与诊断相关参数:
如-XX:+UnlockDiagnosticVMOptions, -XX:+FlightRecorder, -XX:StartFlightRecording=, -XX:OnError= 等,用于启用高级诊断功能如Java Flight Recorder、自定义错误处理行为等。
其他
1. -server:
指定JVM使用服务器模式。通常服务器模式提供了更高的性能优化,适用于长时间运行且需要高吞吐量的生产环境。
2. -Dproperty=value:
设置系统属性,可以在Java代码中通过System.getProperty()访问这些值。常用于配置应用程序的运行时环境,如数据库连接字符串、日志级别等。
请注意,实际使用时应根据具体的应用场景、硬件资源、JVM版本以及性能需求来选择和调整这些参数。过度优化或不当配置可能导致性能下降、内存溢出或其他问题。在进行JVM调优时,建议结合性能监控工具、负载测试以及对JVM内部工作机制的理解来进行。
如果大家需要视频版本的讲解,欢迎关注我的B站: