资讯专栏INFORMATION COLUMN

JVM类加载过程 & 双亲委派模型

happen / 303人阅读

摘要:类加载过程双亲委派模型声明文章均为本人技术笔记,转载请注明出处类加载过程类加载机制将类描述数据从文件中加载到内存,并对数据进行,解析和初始化,最终形成被直接使用的类型。深入理解虚拟机高级特性与最佳实践加载加载阶段由类加载器负责,过程见类加载

JVM类加载过程 & 双亲委派模型 声明

文章均为本人技术笔记,转载请注明出处https://segmentfault.com/u/yzwall

类加载过程

类加载机制:JVM将类描述数据从.class文件中加载到内存,并对数据进行,解析和初始化,最终形成被JVM直接使用的Java类型。
——《深入理解Java虚拟机 JVM高级特性与最佳实践》

加载:加载阶段由类加载器负责,过程见类加载器;

验证:验证阶段负责验证类数据信息是否符合JVM规范,是否是一个有效的字节码文件;

准备:准备阶段负责为类中static变量分配空间,并初始化(与程序无关,系统初始化);

解析:解析阶段负责将常亮池中所有符号引用转换为直接引用;

初始化:初始化阶段负责将所有static域按照程序指定操作对应执行(赋值static变量,执行static块)

上述阶段通常都是交叉混合允许,没有严格的先后执行顺序;

类加载器

类加载器的主要任务:是类加载过程中的加载操作根据一个类的全限定名读取该类的二进制字节流到JVM内部,然后转换为一个对应的java.lang.Class对象实例
开发者可以通过编写自定义类加载器来自定义类的加载规则

类加载器分类 启动类加载器/Bootstrap ClassLoader

在HotSpot虚拟机中,Bootstrap ClassLoader用C++语言编写并嵌入JVM内部,主要负载加载JAVA_HOME/lib目录中的所有类,或者加载由选项-Xbootcalsspath指定的路径下的类;

拓展类加载器/ExtClasLoader

ExtClassLoader继承ClassLoader类,负载加载JAVA_HOME/lib/ext目录中的所有类型,或者由参数-Xbootclasspath指定路径中的所有类型;

应用程序类加载器/AppClassLoader

ExtClassLoader继承ClassLoader类,负责加载用户类路径ClassPath下的所有类型,一般情况下为程序的默认类加载器;

自定义加载器

Java虚拟机规范将所有继承抽象类java.lang.ClassLoader的类加载器,定义为自定义类加载器

双亲委派模型

双亲委派过程:当一个类加载器收到类加载任务时,立即将任务委派给它的父类加载器去执行,直至委派给最顶层的启动类加载器为止。如果父类加载器无法加载委派给它的类时,将类加载任务退回给它的下一级加载器去执行;
除了启动类加载器以外,每个类加载器拥有一个父类加载器,用户的自定义类加载器的父类加载器是AppClassLoader;
双亲委派模型可以保证全限名指定的类,只被加载一次;
双亲委派模型不具有强制性约束,是Java设计者推荐的类加载器实现方式;

参考

[1] 《Java虚拟机精讲》
[2] 《深入理解Java虚拟机 JVM高级特性与最佳实践》
[3]   http://blog.csdn.net/zhangliangzi/article/details/51338291

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/66994.html

相关文章

  • Java的加载机制

    摘要:如果需要支持类的动态加载或需要对编译后的字节码文件进行解密操作等,就需要与类加载器打交道了。双亲委派模型,双亲委派模型,约定类加载器的加载机制。任何之类的字节码都无法调用方法,因为该方法只能在类加载的过程中由调用。 jvm系列 垃圾回收基础 JVM的编译策略 GC的三大基础算法 GC的三大高级算法 GC策略的评价指标 JVM信息查看 GC通用日志解读 jvm的card table数据...

    aervon 评论0 收藏0
  • JVM如何加载一个过程双亲委派模型中有哪些方法?

    摘要:双亲委派模型中方法双亲委派是指如果一个类收到了类加载的请求,不会自己先尝试加载,先找父类加载器去完成。当顶层启动类加载器表示无法加载这个类的时候,子类才会尝试自己去加载。 类加载过程:加载、验证(验证阶段作用是保证Class文件的字节流包含的信息符合JVM规范,不会给JVM造成危害)、准备(准备阶段为变量分配内存并设置类变量的初始化)、解析(解析过程是将常量池内的符号引用替换成直接引用...

    shadajin 评论0 收藏0
  • 虚拟机加载机制

    摘要:虚拟机为了保证一个类的方法在多线程环境中被正确地加锁同步。但启动类加载器不可能认识这些代码。实现模块化热部署的关键则是它的自定义类加载器机制的实现。 概念区分:加载、类加载、类加载器 类加载是一个过程。 加载(Loading)是类加载这一个过程的阶段。 类加载器是ClassLoader类或其子类。 本文中的类的描述都包括了类和接口的可能性,因为每个Class文件都有可能代表J...

    airborne007 评论0 收藏0
  • 加载机制,双亲委派模型,搞定大厂高频面试题

    摘要:验证验证是连接阶段的第一步,这一阶段的目的是为了确保文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身的安全。字节码验证通过数据流和控制流分析,确定程序语义是合法的符合逻辑的。 看过这篇文章,大厂面试你「双亲委派模型」,硬气的说一句,你怕啥? 读该文章姿势 打开手头的 IDE,按照文章内容及思路进行代码跟踪与思考 手头没有 IDE,先收藏,回头看 (万一哪次面试问...

    Object 评论0 收藏0
  • 从一无所知到无所不知————jvm系列(1)

    摘要:学习能更深入的理解这门语言,能理解语言底层的执行过程,深入到字节码层次。 目录   前言 程序的运行 1.JVM类加载机制 ①一般在什么情况下会去加载一个类?也就是说,什么时候.class字节码文件中加载这个类到JVM内存里来? ②验证、准备、初始化 ③初始化 2.类加载器和双亲委派机制 ...

    Betta 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<