Java虚拟机类加载机制浅谈

欢迎进入Java社区论坛,与200万技术人员互动交流 >>进入

  2、类加载器的特点

  1)运行一个程序时,总是由Application Loader(系统类加载器)开始加载指定的类。

  2)在加载类时,每个类加载器会将加载任务上交给其父,如果其父找不到,再由自己去加载。

  3)Bootstrap Loader(启动类加载器)是最顶级的类加载器了,其父加载器为null.

  3、类加载器的双亲委派模型

  类加载器双亲委派模型的工作过程是:如果一个类加载器收到一个类加载的请求,它首先将这个请求委派给父类加载器去完成,每一个层次类加载器都是如此,则所有的类加载请求都会传送到顶层的启动类加载器,只有父加载器无法完成这个加载请求(即它的搜索范围中没有找到所要的类),子类才尝试加载。

  下面是一个类加载器双亲委派模型,这里各个类加载器并不是继承关系,它们利用组合实现的父类与子类关系。

  4、类加载的几种方式

  1)命令行启动应用时候由JVM初始化加载,加载含有main的主类。

  2)通过Class.forName()方法动态加载类,默认会执行初始化块。如果指定了ClassLoader,则不会执行初始化块。

  3)通过ClassLoader.loadClass()方法动态加载类,不会执行初始化块。

  5、类加载实例

  当在命令行下执行:java HelloWorld(HelloWorld是含有main方法的类的Class文件),JVM会将HelloWorld.class加载到内存中,并在堆中形成一个Class的对象HelloWorld.class。

  基本的加载流程如下:

  1)寻找jre目录,寻找jvm.dll,并初始化JVM;

  2)产生一个Bootstrap Loader(启动类加载器);

  3)Bootstrap Loader自动加载Extended Loader(标准扩展类加载器),并将其父Loader设为BootstrapLoader。

  4)Bootstrap Loader自动加载AppClass Loader(系统类加载器),并将其父Loader设为ExtendedLoader。

  5)最后由AppClass Loader加载HelloWorld类。

[1][2]

每一个成功者都有一个开始。勇于开始,才能找到成功的路。

Java虚拟机类加载机制浅谈

相关文章:

你感兴趣的文章:

标签云: