75°

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种去,然后执行的? 后续我会给大家图解这个问题?

本文中版权归独秀天狼所有,转载请标注清楚。

本文由【独秀天狼】发布于开源中国,原文链接:https://my.oschina.net/u/2516997/blog/3110600

全部评论: 0

    我有话说: