Skip to content

面试速答(先看这里)

**一句话结论:**例如,如果你想设置最大堆大小为 512MB 并启用 G1 垃圾回收器,你可以这样启动你的 Java 应用程序:

60秒标准回答:

JVM的启动参数有很多,但是我们平常能用上的并不是特别多,这里介绍几个我们常用的

要使用这些 JVM 启动参数,你需要在启动 Java 应用程序时在命令行中指定它们

例如,如果你想设置最大堆大小为 512MB 并启用 G1 垃圾回收器,你可以这样启动你的 Java 应用程序

**答题顺序:**结论 → 原理/机制 → 关键流程 → 场景与取舍 → 易错点

回答主线:

  • **要点1:**JVM的启动参数有很多,但是我们平常能用上的并不是特别多,这里介绍几个我们常用的:
  • **要点2:**要使用这些 JVM 启动参数,你需要在启动 Java 应用程序时在命令行中指定它们。
  • **要点3:**另外,如果是在IDEA中,需要再run配置中增加上对应的参数,如:

**记忆锚点:**Java → JVM → MaxMetaspaceSize → PrintGCDetails → UseParallelGC → MetaspaceSize

加分表达:

  • 例如,如果你想设置最大堆大小为 512MB 并启用 G1 垃圾回收器,你可以这样启动你的 Java 应用程序: 另外,如果是在IDEA中,需要再run配置中增加上对应的参数,如: (图片来源于网络)

追问准备:

  • 围绕「Java」:底层原理是什么?使用时有哪些边界和常见坑?
  • 围绕「JVM」:底层原理是什么?使用时有哪些边界和常见坑?
  • 围绕「MaxMetaspaceSize」:底层原理是什么?使用时有哪些边界和常见坑?
  • 如果线上出现异常,你会如何定位、验证并规避?

典型回答 ​

JVM的启动参数有很多,但是我们平常能用上的并不是特别多,这里介绍几个我们常用的:

  1. 堆设置:
  • -Xms:设置堆的初始大小。
  • -Xmx:设置堆的最大大小。
  1. 栈设置:
  • -Xss:设置每个线程的栈大小。
  1. 垃圾回收器设置:
  • -XX:+UseG1GC:使用 G1 垃圾回收器。
  • -XX:+UseParallelGC:使用并行垃圾回收器。
  1. 性能调优:
  • -XX:PermSize 和 -XX:MaxPermSize:在 Java 8 之前设置永久代的初始大小和最大大小。
  • -XX:MetaspaceSize 和 -XX:MaxMetaspaceSize:在 Java 8 及以上版本设置 Metaspace 的初始大小和最大大小。
  • -XX:+PrintGCDetails:打印垃圾回收的详细信息。
  1. 调试和分析:
  • -verbose:gc:输出垃圾回收的详细信息。
  • -XX:+HeapDumpOnOutOfMemoryError:在内存溢出时生成堆转储。

扩展知识 ​

如何使用 ​

要使用这些 JVM 启动参数,你需要在启动 Java 应用程序时在命令行中指定它们。

例如,如果你想设置最大堆大小为 512MB 并启用 G1 垃圾回收器,你可以这样启动你的 Java 应用程序:

java
java -Xmx512m -XX:+UseG1GC -jar your-application.jar

另外,如果是在IDEA中,需要再run配置中增加上对应的参数,如:

(图片来源于网络)