JVM 启动参数
-Xms 和 -Xmx:初始和最大堆内存
-Xms
用于设置 JVM 启动时的初始堆内存大小,而-Xmx
则设置堆内存的最大值。这两个参数对应用的性能有直接影响,合理设置可以避免频繁的 GC(Garbage Collection)。
示例:
java -Xms512m -Xmx1024m -jar yourapp.jar
-Xss:设置线程堆栈大小
-Xss
参数用于设置每个线程的堆栈大小。适当的堆栈大小可以避免线程栈溢出错误,特别是当程序涉及大量递归调用时。
示例:
java -Xss512k -jar yourapp.jar
-XX:PermSize 和 -XX:MaxPermSize:永久代内存
-XX:PermSize
和-XX:MaxPermSize
用于设置类信息、常量池等的内存大小。需要注意的是,在 JDK 8 及以上版本中,永久代(PermGen)已经被元空间(Metaspace)取代,相关参数也有所改变。
示例:
java -XX:PermSize=128m -XX:MaxPermSize=256m -jar yourapp.jar
GC 相关
G1 垃圾回收器是 JVM 提供的一种低延迟垃圾回收器,适用于大多数服务端应用。使用-XX:+UseG1GC
参数可以启用 G1 垃圾回收器,提升 GC 性能。
示例:
java -XX:+UseG1GC -jar yourapp.jar
为了监控和调优 GC 行为,可以使用-XX:+PrintGCDetails
和-XX:+PrintGCDateStamps
参数输出详细的 GC 日志信息。这些日志对于分析 GC 性能问题非常有帮助。
示例:
java -XX:+PrintGCDetails -XX:+PrintGCDateStamps -jar yourapp.jar
-Xloggc
是一个非常有用的 JVM 参数,用于指定 GC(垃圾回收)日志的输出文件路径。这个参数可以帮助你将垃圾回收的日志信息记录到一个文件中,方便日后分析和调试。
使用示例:
java -Xloggc:/path/to/your/gc.log -jar yourapp.jar
元空间相关
-XX:MetaspaceSize
-XX:MetaspaceSize
设置元空间的初始大小。当元空间的使用量达到这个值时,JVM 会触发一次垃圾回收(GC)以回收未使用的类元数据。
示例:
java -XX:MetaspaceSize=128m -jar yourapp.jar
-XX:MaxMetaspaceSize
-XX:MaxMetaspaceSize
设置元空间的最大大小。如果未指定这个参数,元空间默认是可以无限增长的,直到耗尽物理内存。
示例:
java -XX:MaxMetaspaceSize=256m -jar yourapp.jar
-XX:MinMetaspaceFreeRatio 和 -XX:MaxMetaspaceFreeRatio
这些参数用于控制元空间的空闲比例。-XX:MinMetaspaceFreeRatio
设置最小空闲比例,当空闲元空间低于该比例时,会触发扩展元空间。-XX:MaxMetaspaceFreeRatio
设置最大空闲比例,当空闲元空间超过该比例时,会触发收缩元空间。
示例:
java -XX:MinMetaspaceFreeRatio=40 -XX:MaxMetaspaceFreeRatio=70 -jar yourapp.jar
-XX:CompressedClassSpaceSize
-XX:CompressedClassSpaceSize
用于设置压缩类空间的大小,这是元空间的一部分,用于存储类指针。
示例:
java -XX:CompressedClassSpaceSize=64m -jar yourapp.jar
类加载相关
Java 虚拟机(JVM)提供了多种参数来控制类加载的行为。合理配置这些参数,可以帮助你更好地管理类加载过程,从而提升应用性能。以下是一些常用的类加载参数:
-XX:+TraceClassLoading
此参数用于跟踪类的加载过程。当该参数开启时,JVM 会输出详细的类加载信息,帮助你了解哪些类在什么时候被加载。
示例:
java -XX:+TraceClassLoading -jar yourapp.jar
-XX:+TraceClassUnloading
与-XX:+TraceClassLoading
相对应,此参数用于跟踪类的卸载过程。它可以帮助你诊断类卸载相关的问题,尤其是在调试和优化内存使用时非常有用。
示例:
java -XX:+TraceClassUnloading -jar yourapp.jar
-XX:InitiatingHeapOccupancyPercent
此参数用于设置堆的占用率阈值,当达到该阈值时,JVM 会触发一次全局的垃圾回收。该参数的值是一个百分比,适用于 G1 垃圾回收器。
示例:
java -XX:InitiatingHeapOccupancyPercent=45 -jar yourapp.jar
-verbose:class
-verbose:class
参数用于输出类加载和卸载的详细信息,包括每个类加载或卸载时的时间戳和类的名称。对于调试类加载问题非常有帮助。
示例:
java -verbose:class -jar yourapp.jar
-XX:NativeMemoryTracking
此参数用于开启本地内存跟踪,可以帮助你监控和分析 JVM 本地内存的使用情况。它支持"off"、"summary"和"detail"三种模式。
示例:
java -XX:NativeMemoryTracking=summary -jar yourapp.jar