Java 虚拟机面试题, 常用的 JVM 配置参数有哪些?
Java 虚拟机面试题, 常用的 JVM 配置参数有哪些?
QA
Step 1
Q:: Java 虚拟机常用的 JVM 配置参数有哪些?
A:: 常用的 JVM 配置参数包括以下几类:
1.
内存相关参数:
-
-Xms
:设置 JVM 初始化堆大小。
-
-Xmx
:设置 JVM 最大堆大小。
-
-Xmn
:设置年轻代大小。
-
-XX:PermSize
和 -XX:MaxPermSize
:设置永久代初始大小和最大大小(在 JDK 8
之前)。
-
-XX:MetaspaceSize
和 -XX:MaxMetaspaceSize
:设置元空间初始大小和最大大小(在 JDK 8
之后)。
2.
垃圾回收器参数:
-
-XX:+UseSerialGC
:启用串行垃圾回收器。
-
-XX:+UseParallelGC
:启用并行垃圾回收器。
-
-XX:+UseConcMarkSweepGC
:启用 CMS 垃圾回收器。
-
-XX:+UseG1GC
:启用 G1
垃圾回收器。
3.
调试和诊断参数:
-
-XX:+PrintGCDetails
:打印详细的垃圾回收日志。
-
-XX:+HeapDumpOnOutOfMemoryError
:在发生 OOM 时生成堆转储文件。
-
-XX:OnOutOfMemoryError
:在发生 OOM 时执行指定的命令。
4.
性能调优参数:
-
-XX:+AggressiveOpts
:启用 JVM 的一些实验性优化选项。
-
-XX:NewRatio
:设置老年代和新生代的比例。
-
-XX:SurvivorRatio
:设置 Eden 区与 Survivor 区的比例。
Step 2
Q:: 什么是 JVM?它的主要组成部分是什么?
A:: Java 虚拟机(JVM)是 Java 程序的运行环境,负责将字节码转换为机器码执行。JVM 的主要组成部分包括:
1.
类加载器(Class Loader):负责加载类文件,将字节码加载到 JVM 内存中。
2.
运行时数据区(Runtime Data Area):包括方法区、堆、栈、本地方法栈和程序计数器等内存区域,用于存储类信息、对象实例、方法调用等。
3.
执行引擎(Execution Engine):包含解释器、即时编译器(JIT)等组件,负责将字节码转换为机器码并执行。
4.
垃圾回收器(Garbage Collector):负责自动管理内存,回收不再使用的对象。
Step 3
Q:: 什么是垃圾回收(GC)?JVM 中有哪些垃圾回收算法?
A:: 垃圾回收(GC)是 JVM 的一项重要功能,自动回收不再使用的对象,释放内存空间。JVM 中常见的垃圾回收算法包括:
1. **标记-
清除算法**:标记所有需要回收的对象,然后清除它们。
2.
复制算法:将活跃对象复制到新的内存区域,旧区域则一次性清除。
3. **标记-
整理算法**:标记活跃对象后,通过整理将它们移动到一块连续的内存区域。
4.
分代收集算法:将内存划分为新生代和老年代,不同区域使用不同的回收算法。