1-1jvm(1)

1 jvm位置

JVM是运行在操作系统之上的,它与硬件没有直接的交互
在这里插入图片描述

2 jvm 体系结构概述

​​​​​​​​​​ # 3 类加载器 ## 3.1 负责加载class文件,class文件在文件开头有特定的文件标示,将class文件字节码内容加载到内存中,并将这些内容转换成方法区中的运行时数据结构并且ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine决定

在这里插入图片描述

外卖小哥把餐送到你手上,他就不管了。饭的质量什么有他无关,他只负责送到你手上。
ClassLoader和外卖小哥一样,把class文件加载到内存就不管了。之后就是jvm内部的事了。

。把class文件读到内存中,通过类加载器,变成Class文件,为原数据模版。不能直接用,要想要用的话,需要new出来一个个实例。

3.2类加载器有几种

4种

。启动类加载器:
打印出来是null
jdk自带的走的都是 启动类加载器
。如果是自己编写的是AppClassLoader

。拓展类加载器
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
。。为什么能直接使用object,set。list等类?
因为rt.jar包被Bootstrap和加载器在一启动的时候,就加载到了jvm当中,所以可以直接使用(rt.jar位于 Java—》jre—>lib —>rt.jar.)。

3.3双亲委派机制

概念
当一个类收到了类加载请求,他首先不会尝试自己去加载这个类,而是把这个请求委派给父类去完成,每一个层次类加载器都是如此,因此所有的加载请求都应该传送到启动类加载其中,只有当父类加载器反馈自己无法完成这个请求的时候(在它的加载路径下没有找到所需加载的Class),子类加载器才会尝试自己去加载。

采用双亲委派的一个好处是比如加载位于 rt.jar 包中的类 java.lang.Object,不管是哪个加载器加载这个类,最终都是委托给顶层的启动类加载器进行加载,这样就保证了使用不同的类加载器最终得到的都是同样一个 Object对象。

解释
我爸是李刚,有事找我爹
要用a.class.先去顶部(启动类加载器)找,找的到你就用,找不到就往下一层(拓展类加载器)去找。找的到你用,找不到就去AppClassLoader找,再找不到会报错。

在这里插入图片描述
在这里插入图片描述
rt.jar里边的string.class没有main方法。所以程序报错。他先去启动类加载器去找。如果启动类加载器没有才往下边找。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值