ITKeyword,专注技术干货聚合推荐

注册 | 登录

jvm类加载器的父类委托机制

zdp072 分享于 2016-04-10

推荐:JVM类加载机制

概述 虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。

2020腾讯云7月秒杀活动,优惠非常大!(领取2860元代金券),
地址https://cloud.tencent.com/act/cps/redirect?redirect=1040

2020阿里云最低价产品入口,含代金券(新老用户有优惠),
地址https://www.aliyun.com/minisite/goods

1. 两种类型的类加载器:

(1) JVM自带的加载器

- 根类加载器(Bootstrap) 它负责加载虚拟机的核心类库,如java.lang.*等

使用C++编写,它的实现依赖于底层操作系统,它并没有继承java.lang.ClassLoader类


- 扩展类加载器(Extension) 它的父加载器为根类加载器,它从jre\lib\ext子目录下加载类库,它使用Java代码实现,是java.lang.ClassLoader类的子类。


- 系统类加载器(System - 应用类加载器) 它的父加载器为扩展类加载器,它从环境变量classpath中加载类,它是用户自定义的类加载器的默认父加载器。它使用java实现,是java.lang.ClassLoader类的子类。


注意:父子加载器并非继承关系,也就是说子加载器不一定是继承了父加载器

他们其实是一种包装关系 

protected ClassLoader(ClassLoader parent){

}


推荐:基础加强____【Java类加载器 & "委托机制"】

"类加载器" *类加载器的作用, 把用到的类.class 加载到内存,以二进制码的形式存在 *Java虚拟机中可以安装多个类加载器,系统默认三个主要类加载器,每个类负

(2) 用户自定义的类加载器

- java.lang.ClassLoader的子类

- 用户可以定制类的加载方式



2. 父类委托机制:




3. 为何使用父类委托机制?

父类委托机制的优点是能够提高软件系统的安全性,假设我自己定义一个类加载器,然后随便伪造一个类,这个类不符合jvm规范,里面有不安全的代码,如果不适用父类委托机制,那么这个类就会被直接加载到内存里面了。 

如果使用父类委托,那么就会被父加载器加载,它会按照jvm规范来加载,不符合规范就不会加载。


4. 运行时包:

决定两个类是不是属于同一个运行时包,不仅要看它们的包名是否相同,还要看定义类加载器是否相同,只有属于同一运行时包的类才能互相访问包可见的类和类成员,这样的限制能避免用户自定义的类冒充核心类库的类区访问核心类库的包可见成员。

推荐:JVM学习-ClassLoader的父类委托机制

1,什么是类加载器         加载类的工具.   2,类加载器有什么作用         当程序需要的某个类,那么需要通过类加载器把类的二进制加载到内存中. 类加载器也是J

1. 两种类型的类加载器: (1) JVM自带的加载器 - 根类加载器(Bootstrap) 它负责加载虚拟机的核心类库,如java.lang.*等 使用C++编写,它的实现依赖于底层操作系统,它并没有继承java.lang.Class

相关阅读排行


相关内容推荐

最新文章

×

×

请激活账号

为了能正常使用评论、编辑功能及以后陆续为用户提供的其他产品,请激活账号。

您的注册邮箱: 修改

重新发送激活邮件 进入我的邮箱

如果您没有收到激活邮件,请注意检查垃圾箱。