JVM类加载器(2024最新面试题)

文章目录


提示:以下是本篇文章正文内容,下面案例可供参考

一、什么是类加载器,类加载器有哪些?

要想理解类加载器的话,务必要先清楚对于一个 Java 文件,它从编译到执行的整个过程。
  • 类加载器:用于装载字节码文件(.class文件)
  • 运行时数据区:用于分配存储空间
  • 执行引擎:执行字节码文件或本地方法
  • 垃圾回收器:用于对JVM中的垃圾内容进行回收

类加载器

        JVM只会运行二进制文件,而类加载器( ClassLoader )的主要作用就是将 字节码文件加载到JVM ,从而让 Java 程序能够启动起来。现有的类加载器基本上都是java.lang.ClassLoader的子类,该类的只要职责就是用于将指定的类找到或生成对应的字节码文件,同时类加载器还会负责加载程序所需要的资源。

类加载器种类

类加载器根据各自加载范围的不同,划分为四种类加载器:
  • 启动类加载器(BootStrap ClassLoader) 该类并不继承ClassLoader类,其是由C++编写实现。用于加载 JAVA_HOME/jre/lib目录下的类库。
  • 扩展类加载器(ExtClassLoader) 该类是ClassLoader的子类,主要加载JAVA_HOME/jre/lib/ext目录中的类库。
  • 应用类加载器(AppClassLoader) 该类是ClassLoader的子类,主要用于加载classPath下的类,也就是加载开发者自己编写的Java类。
  • 自定义类加载器:开发者自定义类继承ClassLoader,实现自定义类加载规则。
上述四种类加载器的层次结构如下如下:
类加载器的体系并不是 继承 体系,而是 委派体系 ,类加载器首先会到自己的 parent中查找类或者资源,如果找不到才会到自己本地查找。类加载器的委托行为动机是为了避免相同的类被加载次。

二、什么是双亲委派模型?

        如果一个类加载器在接到加载类的请求时,它首先不会自己尝试去加载这个类,而是把这个请求任务委托给父类加载器去完成,依次递归,如果父类加载器可以完成类加载任务,就返回成功;只有父类加载器无法完成此加载任务时,才由下一级去加载。

三、JVM为什么采用双亲委派机制

  • 通过双亲委派机制可以避免某一个类被重复加载,当父类已经加载后则无需重复加载,保证唯一性。
  • 为了安全,保证类库API不会被修改。(能防止恶意篡改核心API库)

四、说一下类装载的执行过程?

类从加载到虚拟机中开始,直到卸载为止,它的整个生命周期包括了:加载、验证、准备、解析、初始化、使用和卸载这7 个阶段。其中,验证、准备和解析这三个部分统称为连接(linking )。

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值