jvm培训:类加载器和双亲委派机制

我们都知道了类加载的时间点,那么jvm是通过什么方式对类进行加载的呢?就是类加载器。
  那接下来我们就来聊聊jvm的类加载器。
  jvm培训
  jvm的类加载器总体上可以分成4层,我们一起看一下。
  1.启动类加载器
  首先是JVM启动的第一步,即BootstrapClassLoader,它主要用于加载Java的核心类。
  我相信每个人都知道,无论运行Java程序的链接是什么,都必须安装jvm虚拟机环境,并且该环境的目录中有一个lib文件夹。该文件是核心Java类库。支持java系统的运行。
  因此,一旦启动了jvm,将首先通过启动类加载器来加载lib文件夹下的核心类库。
  2.扩展类加载器
  然后我们就到了第二层,扩展类加载器ExtensionClassLoader,这个类加载器其实与启动类加载器是类似的。
  在我们的jvm虚拟机环境目录下,是有一个lib/ext的文件夹的,这里面的类就是java运行环境的一些扩展类,这些扩展类就是在jvm启动后,通过扩展类加载器进行加载的。
  3.应用程序类加载器
  加载完核心类库和扩展类,这时候就到了第三层,应用程序类加载器ApplicationClassLoader,这个类加载器你就可以理解成是加载我们写好的java代码的就可以了。
  4.自定义类加载器
  第一步是JVM启动的第一步,即BootstrapClassLoader,它主要用于加载Java的核心类。
  我相信每个人都知道,无论运行Java程序的链接是什么,都必须安装jvm虚拟机环境,并且该环境的目录中有一个lib文件夹。该文件是核心Java类库。支持java系统的运行。
  因此,一旦启动jvm,将首先通过启动类加载器来加载lib文件夹下的核心类库。
  这就是双亲委派机制。
  举个例子,假如我们的应用程序类加载器要加载一个类A,那么首先它会先回家找它老爸扩展类加载器,问问“老爸,你那有这个类A吗?”
  然后扩展类加载器接到这个请求之后,同样也懒得处理,再去找它爷爷启动类加载器。
  它爷爷找了一圈没找到类A,很生气,就对扩展类加载器说,“我这没有,你自己找去!”
  然后扩展类加载器就灰溜溜的自己找了一圈,同样也没找到,这时候就找到应用类加载器了,说:“我这哪有你这个类A,这明明是你自己应该干的活,爱上哪找上哪找去,我不管了”。
  这时候应用类加载器就只能自己去处理了,找了一圈发现找到了类A,就把它加载到jvm内存中了。
  相信大家看了这个例子应该很容易理解了吧。
  所以假设我们自己创建了一个类java。lang。String,它是不会被应用类加载器加载到内存中的,因为父类中可以找到这个类,就直接给加载到内存中了。
  推荐阅读:jvm培训:如何判断哪些对象需要回收?
  如果你想了解更多关于java架构师的专业知识,可以加入JAVA架构师交流群:1037935907,里面都是同行,有资源分享包括但不限于(分布式架构、高可扩展、高性能、高并 发、Jvm性能调优、Spring,MyBatis,Nginx源码分析,Redis,ActiveMQ、、Mycat、Netty、Kafka、Mysql 、Zookeeper、Tomcat、Docker、Dubbo、Nginx)。欢迎一到五年的工程师加入,合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值