JVM 原理

1、什么是类加载器,其工作原理是什么?

 

寻找类的字节码文件并构造出类在JVM内部表示对象的组件。

 

在java中,类装载器将一个java类装入JVM中,必须要经过以下步骤:

a. 装载:查找和导入class文件

b. 链接:执行校验,准备,和解析步骤,其中解析步骤是可以选择的。

             校验:检查装入的class文件数据的准确性

             准备:给类的静态变量分配存储空间

             解析:将符号引用转化为直接引用

c. 初始化 对类的静态变量,静态代码块执行初始化工作

 

 

类加载工作是由ClassLoader及其子类负责,ClassLoader是一个重要的java运行时系统组件,它负责在运行时查找和装入Class字节码文件。JVM在运行时会产生三个ClassLoader:根装载器,ExtClassLoader(扩展类装载器),AppClassLoader(系统类装载器)。其中,根装载器不是ClassLoader的子类,它使用C++编写的,因此,我们在java中看不到它,根装载器负责装载jre的核心类库,如jre下的rt.jar,charsets.jar等。ExtClassLoader和AppClassLoader都是ClassLoader的子类。其中ExtClassLoader负责装载扩展目录ext中的jar类包;AppClassLoader负责装载ClassPath路径下的类包。

 

这三个装载器存在父子层级关系,即根装载器是ExtClassLoader的父装载类器,ExtClassLoader是AppClassLoader的父装载类器。

 

  默认情况下,使用AppClassLoader装载应用程序的类。

 

  JVM装载类时使用“全盘负责委托机制”,全盘负责是指当一个ClassLoader装载一个类的时,除非显示使用另一个ClassLoader,该类所依赖及引用的类也由这个ClassLoader载入;委托机制是指先委托父装载器寻找目标类,只有在找不到的情况下才从自己的类路径中查找病装载目标类。这一点是基于安全考虑,如果有人编写了一个恶意的基础类“java.lang.String” 并装载到JVM中将会引起很可怕的后果,由于使用了“全盘负责委托机制”,java.lang.String 永远是由根装载器装载的,这样就可以避免上述事件的发生。

 

 

全盘负责委托机制也会引起一些异常比如NoSuchMethodError的错误信息。因为类路径放置了不同版本的类包,类加载碰上没有这个方法的这个版本类包,就会运行时抛出异常。

 

 

 

            

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值