JVM入门之类加载器

JVM入门之类加载器

JVM架构体系

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JtKNBVLX-1611303275103)(https://note.youdao.com/yws/api/personal/file/F88865AE2E12481A9226A102289EDEF9?method=download&shareKey=8f3e2a79c31985c4a432e9aa401f07a7)]

类加载器

负责加载class文件,class文件在文件开头有特定的文件标示cafe babe

cafe babe 0000 0034 001e 0a00 0600 1407
0015 0700 160a 0017 0018 0700 1907 001a
0100 063c 696e 6974 3e01 0003 2829 5601
0004 436f 6465 0100 0f4c 696e 654e 756d

将class文件字节码内容加载到内存中,并将这些内容转换成方法区中的运行时数据结构并且ClassLoader只负责class文件的加载。

至于它是否可以运行,则由Execution Engine决定

echo %JAVA_HOME%

echo %PATH%

echo %CLASSPATH%

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O0wItdwa-1611303275105)(https://note.youdao.com/yws/api/personal/file/1DA4E458817A4C47B7C23E3427EE8E28?method=download&shareKey=62f17352eaafe07eea2068d094c135c6)]

虚拟机自带的加载器:

  • 启动类加载器(Bootstrap)C++。加载jdk自带类,rt.jar

  • 扩展类加载器(Extension)Java.如javax

  • 应用程序类加载器(AppClassLoader)Java也叫系统类加载器,加载当前应用的classpath的所有类.

    开发者编写的类加载。

    用户自定义加载器:

  • Java.lang.ClassLoader的子类,用户可以定制类的加载方式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ySzUtPj6-1611303275106)(https://note.youdao.com/yws/api/personal/file/77F6D58273994FE286EF5D5160C23F21?method=download&shareKey=6ee7508ec2a82011036a9ce416901eb0)]

入口文件

rt.jar\sun\misc\Laucher.class

双亲委派

当一个类收到了类加载请求,他首先不会尝试自己去加载这个类,而是把这个请求委派给父类去完成,每一个层次类加载器都是如

此,因此所有的加载请求都应该传送到启动类加载其中,只有当父类加载器反馈自己无法完成这个请求的时候(在它的加载路径下没

有找到所需加载的Class),子类加载器才会尝试自己去加载。

采用双亲委派的一个好处是比如加载位于 rt.jar 包中的类 java.lang.Object,不管是哪个加载器加载这个类,最终都是委托给顶层的

启动类加载器进行加载,这样就保证了使用不同的类加载器最终得到的都是同样一个 Object对象。

参考

2020权威_juc 与 jvm 并发编程 Java 必学_阳哥- 尚硅谷:https://www.bilibili.com/video/BV1vE411D7KE?p=78

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值