JVM相关面试题

1. JVM的结构

  1. 类加载器:bootstrapClassLoader、ExtClassLoader、AppClassLoader
  2. 运行时数据区:
    1. 方法区:存储已被虚拟机加载的类、接口、类中方法字节码、类中字段,静态变量,常量,运行时常量池
    2. 堆:存放对象实例
    3. java栈:
    4. 程序计数器:当前线程所执行的字节码的行号指示器
    5. 本地方法栈:虚拟机使用到的Native方法服务
  1. 执行引擎(Execution Engine):解析执行class文件中的指令
  2. 本地方法接口:

2. 栈帧存储什么

  1. 栈帧数据(Frame Data):方法信息
  2. 本地变量(Local Variables):输入参数、输出参数、方法内的变量(8种基本类型的变量+对象的引用变量)
  3. 栈操作(Operand Stack):记录出栈、入栈的操作(方法的调用过程就是入栈出栈的过程)

3. 双亲委派模型

  1. 当APPClassLoader加载一个class时,先把类加载请求委派给父类加载器ExtClassLoader去完成
  2. 当ExtClassLoader加载一个class时,先把类加载请求委派给父类加载器BootStrapClassLoader去完成
  3. 如果BootStrapClassLoader加载失败,会使用ExtClassLoader来加载
  4. 如果ExtClassLoader加载失败,会使用AppClassLoader来加载
  5. 如果AppClassLoader也加载失败,则会报异常ClassNotFoundException

4. 堆的构成

  1. 新生区:
    1. 伊甸区(Eden space):
    2. 幸存者区(Survivor space):
  1. 老年代
  2. 永久代

5.常见JVM参数

  1. xms:初始堆大小,默认是内存的1/64
  2. xmx:最大堆的大小,默认是内存的1/4
  3. xmn:新生区的大小
  4. xx:+pringGCDetails:输出详细的GC处理日志

6. 垃圾判定的方法

  1. 引用计数法:通过判断对象的引用数量来决定对象是否可以被回收
  2. 可达性分析法:从"GC Roots"节点开始向下搜索,节点所走过的路径称为引用链,引用链不包含的对象即可以回收的对象
    1. 栈帧中的本地变量表中的引用对象
    2. 方法区中的类静态属性引用的对象
    3. 方法区中的常量引用的对象
    4. 本地方法栈中JNI的 引用对象

7. 四种引用

  1. 强引用:永远不会被垃圾回收器回收
  2. 软引用:内存不足时会被垃圾回收器回收
  3. 弱引用:下次垃圾回收时会被垃圾收集器回收
  4. 虚引用:无法通过虚引用获取对象实例,在引用的对象被垃圾收集器回收时会收到通知

8. 垃圾回收算法

  1. 复制算法:将内存平均分成两部分,将这部分满的内存中的存活对象复制到另一个内存中,然后将这个内存进行清空处理
    1. 优点:实现简单、不产生内存碎片
    2. 缺点:浪费内存
  1. 标记清除算法:使用可达性分析算法标记出需要回收的对象,将标记的对象进行清除
    1. 优点:不会浪费内存
    2. 缺点:内存空间不连续
  1. 标记整理算法:使用可达性算法标记出存活对象和垃圾对象,将存活对象移动到一端,然后清除边界外的内存

9. 垃圾收集器:

  1. Serial收集器:垃圾收集的过程会STW
    1. 区域:新生代
    2. 算法:复制算法
    3. 线程:单线程
    4. 类型:串行
  1. ParNew收集器:Serial的多线程版本
    1. 新生代:复制算法、并行
    2. 老年代:标记整理、串行
  1. Parallel收集器:关注系统的吞吐量
    1. 区域:新生代
    2. 算法:复制算法
    3. 线程:多线程
    4. 类型:并行
  1. Serial Old收集器:
    1. 区域:老年代
    2. 算法:标记整理
    3. 线程:单线程
    4. 类型:串行
  1. Parallel Old收集器:
    1. 区域:老年代
    2. 算法:标记整理
    3. 线程:多线程
    4. 类型:并行
  1. CMS收集器:关注系统的响应时间
    1. 区域:老年代
    2. 算法:标记清除
    3. 线程:多线程
    4. 类型:并行
    5. 过程
      1. 初始标记:只标记GCRoot,stw
      2. 并发标记:工作线程正常执行,标记垃圾对象
      3. 重新标记:标记垃圾对象,stw
      4. 并发清除:可以和用户线程同时执行,清除垃圾对象
  1. G1收集器:面向服务端应用,针对多核CPU及大容量内存,JDK9之后默认的垃圾收集器
    1. 特点:
      1. 空间整合
      2. 可预测停顿

10. 垃圾回收器选择策略

  1. 客户端程序:Serial + Serial Old
  2. 吞吐率优先的服务端程序 : Parallel Scavenge + Parallel Old;
  3. 响应时间优先的服务端程序 :ParNew + CMS
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值