JVM加载class文件的原理机制;双亲委派模型

27 篇文章 0 订阅

由于Java是一种动态解释型语言,所以class只有被加载到JVM中后才能运行。运行一个程序,JVM将编译生成的.class文件按照一定的需求和规则加载到内存中,并组织成为一个完整的Java应用程序。而加载的过程是类加载器完成的,类加载器本身也是一个类,实质就是把类文件从硬盘读取到内存中。类的加载方式:
1.隐式加载:new操作创建对象时会隐式调用类加载器将类加载到JVM中,
2.显示加载:通过直接调用Class.forName(“className”)来将所需的类加载到JVM当中。

在Java语言中,类的加载是动态的,不会一次将所有的类加载后再运行,而是保证程序运行的基础类完全加载到JVM当中,其他类在需要时加载。Java内置三种类加载器:

  • Bootstrap:启动类加载器,使用C++实现,是虚拟机自身的一部分,无法被Java程序直接引用
  • ExtClassLoader:扩展类加载器,开发者可直接使用的标准扩展类加载器,xml文件解析类、界面框架类
  • AppClassLoader:应用程序加载类,负责用户类路径上指定的类库。
  • 自定义类加载器

JVM加载类时默认使用双亲委派模型(JDK1.2引入):双亲委派模型就是当一个类加载器接收到类加载请求时,先将加载任务委托给父类去处理,每一层的类加载器都是这样,因此所有加载请求都会传送到顶层的BootStrap中,只有当上层加载器反馈无法完成这个类加载请求时(在自己的搜索范围中没有找到此类),下层加载器才会常识自己去加载。

双亲委派模型对Java程序的稳定运行有很好的保证,让Java的类随着他的类加载器一起具备了一种带有优先级的层次关系;q比如Object类,它存放在rt.jar中,无论哪个类加载器加载这个类,都会将他交给最顶层BootStrap加载器尝试加载,所以Object类在程序的任何类加载器环境中都是同一个类。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值