JAVA-大白话探索JVM-类加载器(一)

JVM???

Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。JVM是Java Virtual Machine(Java虚拟机)的缩写,Java程序编译后,产生.class文件,并不是在CPU上执行,而是由JVM执行,JVM屏蔽了与具体平台相关的信息,针对平台开发其对应的解释器,Java 虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。因此实现java平台无关性。从而实现 一次编译,到处运行640?wx_fmt=jpeg

所以,JVM是啥??

不急不急。640?wx_fmt=jpeg

JVM = 类加载器 classloader + 执行引擎 execution engine + 运行时数据区域 runtime data area

现在我们知道JVM是什么了,那来说说看是编译后的.class是怎么加载到内存中的。

640?wx_fmt=jpeg

类加载器

话不多说,直接上图640?wx_fmt=png640?wx_fmt=jpeg

类加载器

作用:装载.class文件

指将类.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后堆中创建一个java.lang.Class对象,用来封装类在方法区的数据结构。类加载器并不需要等到某个类被“首次主动使用”时再加载它,JVM规范允许类加载器在预料某个类将要被使用时就预先加载它

讲类加载器,一定要知道的机制640?wx_fmt=jpeg

双亲委派模型(Parent Delegation Model)

双亲委派模型中除了启动类加载器之外其余都需要有自己的父类加载器,如图中Bootstartp ClassLoader。子类加载器和父类加载器不是以继承的关系来实现,而是通过组合关系来复用父加载器的代码。

过程
  1. 当前 ClassLoader 首先从自己已经加载的类中查询是否此类已经加载,如果已经加载则直接返回原来已经加载的类。没有的话,就会收到了类加载请求,自己不会首先加载,而是委派给父加载器进行加载,每个层次的加载器都是这样。直到Bootstartp ClassLoader

每个类加载器都有自己的加载缓存,当一个类被加载了以后就会放入缓存,
等下次加载的时候就可以直接返回了。
好处

双亲委派的好处 : 主要是为了安全性,避免用户自己编写的类动态替换 Java 的一些核心类,由于每个类加载都会经过最顶层的启动类加载器,比如 java.lang.Object这样的类在各个类加载器下都是同一个类(只有当两个类是由同一个类加载器加载的才有意义,这两个类才相等。)

各类加载器作用

Bootstartp ClassLoader : 加载核心api。
Extension ClassLoader : 加载出了基本 API 之外的一些拓展类。
App ClassLoader : 加载应用程序和程序员自定义的类。
Custom ClassLoader : 供用户自定义加载class

640?wx_fmt=jpeg

等等,说好的大白话呢

类加载器,顾名思义,加载.class的器,呃····,将就一下640?wx_fmt=jpeg

好了,结束了,下篇再讲讲类加载装载过程。先去吃吃炸鸡咯~~~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值