JVM面试题及答案(6-10)

6、 JVM中有哪些内存区域?各自的作用是什么?

JVM中主要分为以下几个内存区域:
-程序计数器(Program Counter Register):用于记录当前线程所执行的字节码的执行位置。
-Java虚拟机栈(Java Virtual Machine Stack):用于存储局部变量、操作数栈、动态链接、方法出口等信息。
-本地方法栈(Native Method Stack):与Java虚拟机栈类似,只不过是为本地方法服务的。
-Java堆(Java Heap):用于存储对象实例。
-方法区(Method Area):用于存储类的信息、常量、静态变量、即时编译器编译后的代码等。
-运行时常量池(Runtime Constant Pool):用于存储编译期生成的各种字面量和符号引用。

7、 垃圾回收器有哪些?各自的特点是什么?

JVM中的垃圾回收器主要有以下几种:
-Serial收集器:单线程、新生代、复制算法,适用于小内存、单CPU的环境。
-ParNew收集器:多线程、新生代、复制算法,是Serial收集器的多线程版本,适用于多CPU环境。
-Parallel Scavenge收集器:多线程、新生代、复制算法,适用于高吞吐量的场景。
-Serial Old收集器:单线程、老年代、标记-整理算法。
-Parallel Old收集器:多线程、老年代、标记-整理算法。
-CMS收集器:多线程、老年代、标记-清除算法,适用于对停顿时间有要求的场景。
-G1收集器:多线程、分代收集、标记-整理算法,适用于大内存、多CPU环境,具有可预测的停顿时间。

8、 什么是OOM?有哪些原因会导致OOM?

OOM(Out of Memory)即内存溢出,指程序在申请内存时,无法获得所需的内存空间,从而抛出的异常。导致OOM的原因可能有以下几个:
内存泄漏:程序中有大量的无用对象占用了内存空间,导致可用内存空间不足。
内存溢出:程序中创建了大量的对象,超出了JVM所分配的内存空间。
代码Bug:程序中存在Bug,导致出现无限循环、递归等情况,从而耗尽了内存空间。

9、 什么是Java堆?有哪些特点?

Java堆是JVM管理的内存中最大的一块,用于存储Java对象实例,被所有线程共享。Java堆具有自动内存管理机制,可以自动进行垃圾回收,回收无用的对象实例,以保证Java应用程序的健壮性和稳定性。

10、 Java堆中有哪些内存区域?各自的作用是什么?

Java堆中主要分为新生代和老年代两个区域:
新生代:用于存储新创建的Java对象实例,又可分为Eden空间和两个Survivor空间。大多数对象在这里被创建和销毁,采用复制算法进行垃圾回收。
老年代:用于存储存活时间较长的Java对象实例,即在新生代已经经过多次垃圾回收仍然存活下来的对象,采用标记-清除算法和标记-整理算法进行垃圾回收。