JVM 面试题
类的加载机制是什么?
类加载到内存中主要有 5 个阶段,分别为:
①加载:将 Class 文件读取到运行时数据区的 方法区内,在堆中创建 Class 对象,并封装类在方法区的数据结构的过程。
②验证:主要用 于确保 Class 文件符合当前虚拟机的要求,保障虚拟机自身的安全,只有通过验证的 Class 文件才能被 JVM 加载。
③准备:主要工作是在方法区中为类变量分配内存空间并设置类中 变量的初始值。
④解析:将常量池中的符号引用替换为直接引用。
⑤初始化:主要通过执行 类构造器的方法为类进行初始化,该方法是在编译阶段由编译器自动收集类中静态 语句块和变量的赋值操作组成的。JVM 规定,只有在父类的方法都执行成功后,子 类的方法才可以被执行。在一个类中既没有静态变量赋值操作也没有静态语句块时,编译器 不会为该类生成方法
JVM 有哪些垃圾回收算法?
. 标记-清除算法:标记无用对象,然后进行清除回收。缺点:效率不高,无法清除垃圾碎片。
· 标记-整理算法:标记无用对象,让所有存活的对象都向一端移动,然后直接清除掉端边界以外的内存。
· 复制算法:按照容量划分二个大小相等的内存区域,当一块用完的时候将活着的对象复制到另一块上,然后再把已使用的内存空间一次清理掉。缺点:内存使用率不高,只有原来的一半。
· 分代算法:根据对象存活周期的不同将内存划分为几块,一般是新生代和老年代,新生代基本采用复制算法,老年代采用标记整理算法。
JVM 有哪些垃圾回收器
· Serial:最早的单线程串行垃圾回收器。
· Serial Old:Serial 垃圾回收器的老年版本,同样也是单线程的,可以作为 CMS 垃圾回收器的备选预案。
· ParNew:是 Serial 的多线程版本。
· Parallel 和 ParNew 收集器类似是多线程的,但 Parallel 是吞吐量优先的收集器,可以牺牲等待时间换取系统的吞吐量。
· Parallel Old 是 Parallel 老生代版本,Parallel 使用的是复制的内存回收算法,Parallel Old 使用的是标记-整理的内存回收算法。
· CMS:一种以获得最短停顿时间为目标的收集器,非常适用 B/S 系统。
· G1:一种兼顾吞吐量和停顿时间的 GC 实现,是 JDK 9 以后的默认 GC 选项。

浙公网安备 33010602011771号