4_JVM

JVM面试题汇总

1.强引用、软引用、弱引用、虚引用是什么,有什么区别?

  • 强引用:普通的对象引用关系,如 Cat cat = new Cat();

  • 软引用:用于维护一些可有可无的对象,只有在内存不足时,系统则会回收软引用对象

  • 弱引用:相比软引用来说,要更加无用一些,它拥有更短的生命周期,当 JVM 进行垃圾回收时,无

    论内存是否充足,都会回收被弱引用关联的对象

  • 虚引用:是一种形同虚设的引用,它主要用来跟踪对象被垃圾回收的活动。

2.什么是类加载?类加载的过程?

  • 类加载:虚拟机把描述类的数据(字节码文件)加载到内存里面,并对数据进行校验、准备、解析和初始化,最终变成可以被虚拟机直接使用的class对象;

  • 类的整个生命周期包括:加载(Loading)、验证(Verification)、准备(Preparation)、解析

    (Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)7个阶段。

    • 加载:将字节码从不同的数据源(可能是class文件,也可能是jar包,甚至网络)转化为二进制字节流加载到内存中,并在堆中生成一个代表该类的Class对象
    • 连接--验证:验证该class文件中的字节流信息复合虚拟机的要求,不会威胁到jvm的安全;
    • 连接--准备:JVM会在该阶段对静态变量,分配内存并默认初始化(0,null,false等)
    • 连接--解析:该阶段主要完成符号引用转化成直接引用;
    • 初始化:到了初始化阶段,才开始执行类中定义的java代码;初始化阶段是调用类构造器的过程;

3. 什么是双亲委派模型?为什么需要双亲委派模型?

  • 当一个类加载器收到一个类加载的请求,他首先不会尝试自己去加载,而是将这个请求委派给父类加载

    器去加载,只有父类加载器在自己的搜索范围类查找不到给类时,子加载器才会尝试自己去加载该类;

  • 为了防止内存中出现多个相同的字节码;因为如果没有双亲委派的话,用户就可以自己定义一个

    java.lang.String类,那么就无法保证类的唯一性。

4.列举一些你知道的打破双亲委派机制的例子,为什么要打破?

  • Tomcat,应用的类加载器优先自行加载应用目录下的 class,并不是先委派给父加载器,加载不了

    才委派给父加载器。

posted @ 2023-03-06 22:52  圣骑士的部落  阅读(11)  评论(0)    收藏  举报