JVM知识总结2:类加载器是虚拟机的入口

类加载器是虚拟机的入口,那么类加载器的入口在哪?

首先,我们要知道,我们每次给JVM运行的文件多数的情况都是一堆的文件的,就像我们平时看一本书,你基本没见过一页纸的书吧?所以,JVM一般在运行的时候都是运行一堆的.class文件的。
那么咱们都知道,书要一页一页地的看,一般我们会从目录开始看起对吧,先看看这本书大概的内容。然后开始看第一章这样,当然这里只是打个比方,有的人看书会挑自己喜欢的看,这里对看书习惯不同,还有书本的不同都有所区别,这里没有追求那么相似,大家自己理解就好了。
既然我们看书会从第一页开始看起,那么类加载要如何知道第一页是一堆的.class文件中的哪一个呢?

main方法就是类加载开始载入的地方,也就是JVM这个包工头看的第一页纸。

机器毕竟是机器,所以这里就需要人来指定了,比如说在我们打包成了一个jar文件,这个jar文件中,如果有个文件里有个mian方法,那么那个就是JVM要的“第一页”了,类加载器就是从这个方法里开始读取。所以说main方法是程序开始的地方,至于后来的哪

第一页知道了,那别的那些个文件又是什么时候开始读取的?

加在了第一页,后面的哪些class文件的加载就是根据程序的需求来加载了。
这个加载过程吧,还涉及比较复杂的什么“双亲委派模式”,而且类加载的过程也是够复杂的,不是单单把.class文件变成字节流这么简单的一个过程。

加载(Loading) => 验证(Verification) => 准备(Preparation) => 解析(Resolution) => 初始化(initialization)

这里引用一张来自《深入理解Java虚拟机 第二版》的一张截图:
在这里插入图片描述
以上就是需要加载一个类的具体过程,(截图中包含了『使用』、『卸载』,其实没有)。真的挺复杂的,有的时候,也是不得不佩服虚拟机,一个组件就有如此复杂的功能。
类的加载、连接(包括:验证,准备、解析。)和初始化都是在运行过程中来完成的,这样虽然有性能开销,但是却可以增加程序的灵活性,比如在程序的运行过程中,你通过网络传入了一个类型信息,你可以利用自己的类加载器来完成新的类的加载。这就是Java的灵活性的体现了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值