JVM独家学习(1) 深入分析JVM,如何加载class

JVM如何加载class,有哪些加载器?我们就把JVM开膛破肚。

开场预热

上一篇我说了java是如何运行起来的。以及一些运行的原理,但是这些还远远不够,我们会在这个专栏里面详细的介绍JVM的内部,以及在实际开发的过程中我们是如何玩的jvm,我在jvm有数年的经验和理解,希望可以帮助更多的人,我们一起进步,对正在找工作的想要在面试官眼前一亮的,或者在这块有更深的突破的,希望在这个博客能够对你们有所帮助。在后续的介绍中,我回尽量的少打文字了,我本人也不喜欢写过多的文字,因为我们做程序的喜欢,一句话多个案例和图例来加深印象

JVM加载一个class图解

在这里插入图片描述

一个类从加载到使用,一般会经历下面的这个过程 看图:

加载->验证->准备->初始化->使用->卸载销毁

面试:什么情况下会加载一个类?
所以要搞明白这个问题,就是JVM执行我们写好的代码过程中,什么情况会加载一个class?

话外音:就是什么时候.class字节码会加载到JVM内存中去。

其实通过这个图已经很清楚了,就是你的代码中用到了这个类的时候就会加载。

面试:解释一个类加载器和双亲委派机制

java里面有哪些加载器?简单来说就是下面这几种:

1.Bootstrap classloader 启动类加载器。
他主要负责加载机器上安装的核心类,会去加载你的java安装目录下的lib目录中的核心类库。
2.Extension classloader 扩展类加载器
这个类加载器主要是加载你java安装目录的lib/ext目录的类库。
3.Application classloader 应用程序类加载器
这个类加载器就复杂加载 classpath环境变量所指定路径的累,其实就是去加载工程里面写好的代码,这个类就负责加载写好的类到内存中去。
4.自定义类加载器
除了上面的几种外,还可以自己定位加载器,根据自己的需求去加载类。
5.双亲委派机制
就是应用程序类加载需要加载一个类,会首先委派给自己的父亲加载器会加载,最终会传导最顶层的类加载器去加载。通过上面的图就可以很清晰的看到这个过程。

我给大家留一个思考题?

java大部分同学都是开发WEB系统,我们部署都是采用tomcat之类的WEB容器来部署。那么tomcat的类加载机制应该怎么设计,才能把我们动态部署的程序加载tomcat自身运行的JVM种去,然后执行的?
后续我会给大家图解这个问题?

本文中版权归聚牛庄团队所有,转载请标注清楚。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章