Java 类加载机制

1.类加载器是什么?

类加载器负责将.class文件加载到内存中,并生成Class对象.

2.类加载器是如何工作的?

在java中有三种类加载器 :

Bootstrap ClassLoader(根类加载器) : 负责加载java核心类库.

Extention ClassLoader(扩展类加载器) : 负责加载jre的扩展目录中的jar包.为java扩展的新功能可以通过这种方式加载.需要将扩展的jar包放置在JAVA_HOME/jre/lib/ext目录下.

System ClassLoader(系统类加载器) : 也就是应用类加载器.他负责加载来自java命令的-classpath选项,java.class.path系统属性或CLASSPATH环境变量的所指定的JAR包和类路径.使用ClassLoader.getSystemClassLoader()方法可以获取系统类加载器.一般的用户自定义类加载器的父加载器都是系统加载器.

JVM类加载机制:

1.全盘负责 : 一个类加载器加载某个Class时,该Class依赖的所有Class都有此类加载器加载.除非显示的改变类加载器;

2.父类委托 : 类记载器在加载Class时,首先请求父加载器加载,当父加载器无法加载时才尝试从自己的加载路径加载类.[ 为什么要由父加载器先加载?在JVM中同一个类只有一个Class,它是被全限定名和类加载器所标识的,两个不同的类加载器加载的同一个类文件,产生的Class是不兼容的.为了避免这种情况出现,JVM遵从父类委托的机制.因为该类有可能已经由父类加载了.例如加载一个引用了核心类库的自定义类. ]

3.缓存机制 : 保证所有被加载的类都被缓存,再次加载时,会检查缓存,只有当缓存中没有时才会加载.也就是说如果更改了Class,必须重启JVM;

加载器加载实例次序的父子关系图(子->父):

用户自定义类加载器->系统类加载器->扩展类加载器->根类加载器.

3.如何自定义类加载器?

自定义一个简单的类加载器只需要继承ClassLoader,并覆盖其中的findClass().如果想实现更复杂的功能,覆盖其他方法.

4.URLClassLoader继承了ClassLoader,也是系统类加载器和扩展类加载器的父类.它可以从文件系统,或者远程主机加载Class.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值