深入理解类加载器笔记

目录

 

类加载器的详细介绍

类加载器作用

类加载器层次结构是树状结构:

类加载器的代理模式


类加载器的详细介绍

类加载器作用

  • 类的加载阶段,将class文件字节码内容加载到内存中,并将这些静态数据转换成方法区中的运行时数据结构,在堆中生成一个代表这个类的java.lang.Class对象,作为方法区内数据的访问入口。
  •  类缓存:一个类一旦被加载后,会被加载器缓存一段时间,直到JVM垃圾收集器可以回收这些Class对象.

类加载器层次结构是树状结构:

引导类加载器(bootstrap class loader ) :

  •        用来加载java的核心库(JAVA_HOME/jre/lib/rt.jar,或者sun.boot.class.path路径下的内容),是原生代码(c 语言)实现的,并不继承java.lang.ClassLoader。
  •        加载扩展类和应用程序类加载器,并指定他们的父类加载器(java.lang.ClassLoader)。通过组合关系实现的代码复用,类似于被继承。

扩展类加载器 (extensions class loader):extends java.lang.ClassLoader Java语言 实现的

  •        用来加载java的扩展库(JAVA_HOME/jre/ext/*.jar,或者java.ext.dirs路径下的内容)。Java 虚拟机的实现会提供一个扩展库目录。该类加载器在此目录里面查找并加载java类。
  •        由sun.misc.Launcher$ExtClassLoader实现

应用程序类加载器 (application class loader):extends java.lang.ClassLoader Java语言 实现的

  • 用来加载java应用程序的类路径(classpath java.class.path 路的类
  •        由sun.misc.Launcher$AppClassLoader实现

自定义类加载器:继承java.lang.ClassLoader extends java.lang.ClassLoader Java语言 实现的

  •        开发人员可以通过继承 java.lang.ClassLoader类的方式实现自己的类加载器,以满足一些特殊要求。

 

 

 

 

类加载器的代理模式

代理模式: 交给其他加载器来加载指定的类

双亲委托机制

  •        就是某个特定的加载器在接到加载类的请求时,首先将加载任务委托给父类加载器,依次追溯,知道最高的爷爷辈,如果父类加载器可以完成类加载任务,就成功返回;只有父类加载器无法完成此加载任务时,才能自己去加载。

双亲委托机制是为了保证java核心类库的类型安全

  • 如:这种机制就保证不会出现用户能使用自己定义java.lang.Object类的情况。

类加载器除了加载类也是安全的最基本的屏障。

双亲委托机制是代理模式的一种:

  •        并不是所有的类加载器都采用双亲委托机制。
  •        Tomcat服务器的类加载器也使用代理模式,所不同的是它是首先尝试去加载某个类,如果找不到再代理给父类加载器。这与一般类的加载器的顺序是相反的。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值