[java虚拟机]01.类加载器

首先声明:我不会采用复杂的官方语言描述,尽量使用一些白话描述,图片的来源与描述大多数来源于我看过的视频和自己理解,如果有不详细或不正确之处请大家立刻指出我将立刻修改。

虚拟机概览:
虚拟机概览:

类加载器(Class Loader)
1.问题:类加载器是什么?
解答:类加载器用于加载.class文件,将class文件中的字节码内容加载到内存中去,并将这些内容转换成方法区中运行时的数据结构(不明白此处可以暂且放置 等看到方法区的文章自然明白)。

2.问题:描述ClassLoader的使用流程
在这里插入图片描述
解答:以Car.class文件,ClassLoader的任务就是将Car.class加载并初始化成Car Class这个类,而至于这个类能否运行就是取决于上述总图中的执行引擎来决定
在这里插入图片描述
3.问题:ClassLoader常用的几个?
解答:虚拟机自带的有三个,还加上一个用户自定义的一共四个。
在这里插入图片描述
1.启动类加载器 Bootstrap (根加载器,就是一切加载器的爸爸)
我们可以拿java中的Object类为例测试一下它的加载器
在这里插入图片描述
我们会发现其打印的是null,为什么?因为这货是c++写的,在java堆
(java堆内容后续讲解,先记住这里)中没有其空间,我们自然会打印出null
2.测试完了java自带的Object类我们可以测试一下自建的类
在这里插入图片描述
我们会发现打印的是AppClassLoader,也就是说自建的类是通过AppClassLoader这个应用程序类加载器加载的。
3.还剩下一个就是我们扩展类加载器(Extension Class Loader),它是用来加载一些扩展包的中问的文件,比如javax打头的文件,具体jre中的这个包中的内容其实都是由扩展类加载器加载的
在这里插入图片描述
4.问题:什么叫双亲委派机制?沙箱安全机制?
解答:先看下文这张图
在这里插入图片描述
我们定义的类或者是java中本身自带的类,它们其实都先从上图的顶点(BootStrap)开始找如果由则返回,没有的话从上到下依次排查 。找不到则返回ClassnotfoundException 。这就是我们所说的双亲委派机制。
这样的好处是什么呢?(体现了沙箱安全机制)
从上文我们可以知道BootStrap中放的一般都是java自带的类,而AppClassLoader存放的是用户自定义的类,这样的话我们即使创建一个与BootStrap中同名的类也不会污染到根部java自带的类。这也就是我们所说的沙箱安全机制!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值