面试题:常用的 JVM 配置参数有哪些?

在Java面试中,JVM配置参数是一个常见的话题。以下是一些常用的JVM配置参数,分为内存管理、垃圾回收、性能调优等几类:

1. 内存管理参数

  • -Xms:设置JVM初始堆内存大小。例如,-Xms512m 表示初始堆内存为512MB。
  • -Xmx:设置JVM最大堆内存大小。例如,-Xmx2048m 表示最大堆内存为2GB。
  • -Xmn:设置年轻代(Young Generation)的大小。例如,-Xmn256m 表示年轻代为256MB。
  • -XX:NewRatio :设置年轻代与老年代(Old Generation)的比例。例如,-XX:NewRatio=2 表示年轻代与老年代的比例为1:2。
  • -XX:SurvivorRatio :设置Eden区与Survivor区的比例。例如,-XX:SurvivorRatio=8 表示Eden区与Survivor区的比例为8:1。

2. 垃圾回收参数

  • -XX:+UseSerialGC:启用串行垃圾回收器。
  • -XX:+UseParallelGC:启用并行垃圾回收器。
  • -XX:+UseConcMarkSweepGC:启用CMS(Concurrent Mark Sweep)垃圾回收器。
  • -XX:+UseG1GC:启用G1(Garbage-First)垃圾回收器。
  • -XX:MaxGCPauseMillis :设置最大垃圾回收停顿时间。例如,-XX:MaxGCPauseMillis=200 表示最大停顿时间为200毫秒。
  • -XX:ParallelGCThreads :设置并行垃圾回收的线程数。例如,-XX:ParallelGCThreads=4 表示使用4个线程进行垃圾回收。

3. 性能调优参数

  • -XX:+HeapDumpOnOutOfMemoryError:在发生内存溢出时生成堆转储文件。
  • -XX:HeapDumpPath :指定堆转储文件的路径。例如,-XX:HeapDumpPath=/path/to/dump
  • -XX:+PrintGCDetails:打印详细的垃圾回收日志。
  • -XX:+PrintGCDateStamps:在垃圾回收日志中打印时间戳。
  • -XX:+PrintGCApplicationStoppedTime:打印应用程序停顿时间。
  • -XX:+PrintGCApplicationConcurrentTime:打印应用程序并发时间。

4. 其他常用参数

  • -XX:+DisableExplicitGC:禁用显式调用System.gc()
  • -XX:+UseCompressedOops:启用压缩指针,减少内存占用。
  • -XX:+UseLargePages:启用大页内存支持,提升性能。
  • -XX:+AggressiveOpts:启用激进的优化选项。
  • -XX:+UseBiasedLocking:启用偏向锁,减少锁竞争的开销。

5. 调试和监控参数

  • -XX:+PrintFlagsFinal:打印所有JVM参数的最终值。
  • -XX:+TraceClassLoading:跟踪类的加载过程。
  • -XX:+TraceClassUnloading:跟踪类的卸载过程。
  • -XX:+PrintCompilation:打印JIT编译的详细信息。

6. 元空间参数(Metaspace)

  • -XX:MetaspaceSize :设置元空间的初始大小。例如,-XX:MetaspaceSize=64m
  • -XX:MaxMetaspaceSize :设置元空间的最大大小。例如,-XX:MaxMetaspaceSize=256m

7. 线程栈大小

  • -Xss:设置每个线程的栈大小。例如,-Xss1m 表示每个线程的栈大小为1MB。

8. 直接内存

  • -XX:MaxDirectMemorySize :设置直接内存的最大大小。例如,-XX:MaxDirectMemorySize=512m

9. 类加载器相关

  • -XX:+TraceClassLoading:跟踪类的加载过程。
  • -XX:+TraceClassUnloading:跟踪类的卸载过程。

10. JIT编译器相关

  • -XX:+PrintCompilation:打印JIT编译的详细信息。
  • -XX:+PrintInlining:打印内联方法的详细信息。

11. 其他

  • -XX:+UseStringDeduplication:启用字符串去重,减少内存占用。
  • -XX:+UseTLAB:启用线程本地分配缓冲区(TLAB),提升内存分配效率。

总结

这些参数可以帮助你优化JVM的性能、调试问题以及监控应用程序的运行状态。在实际应用中,根据具体的应用场景和需求,选择合适的参数进行配置是非常重要的。

THE END
点赞11 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容