摘要:我们甚至可以从网络或者其他的地方加载一个二进制流作为程序的一部分。对于任何一个类,我们通过类和这个类的加载器共同确定在中的唯一性,为了保证父类和子类的层次关系。
一.前言
我们一定心里有个疑问,我们那个多态是怎么回事?我们指定的一个接口,却可以等到运行时可以对应于不同的实现类。这是因为,Java有个特性就是依赖运行期动态加载和动态连接,这样实现了Java可以动态进行扩展。我们甚至可以从网络或者其他的地方加载一个二进制流作为程序的一部分。所以,我们通过编译器将我们写的Java文件代码编译成Class文件,程序跑起来的时候通过加载器。
二.加载过程
1、 加载(loading)
三件大事
自定义类加载器:重写loadClass()方法
2、 连接
(1)、 验证
(2)、准备:为类变量分配内存并设置初始值(如int为0)。
(3)、解析:
3、初始化
4、 使用
5、 卸载
三.类加载器
1、唯一性
2、双亲委派模型
当一个类的加载器收到了加载请求,不会自己先动手,而是委派给这个类的父类进行加载,如果找不到加载不了就反馈回来自己加载。这样的话,让Java的类一出生就有了很好的层次父子关系。当然也有一些手段去破坏这种关系而获得某种效果。
双亲委派模型可以被破坏,推荐重写findClass()方法,而不是loadClass(),应用于热部署等技术;
四.小结
我们通过编译器先将我们写的.java代码编译为可执行的.class文件,那么如果我们需要真正的执行这个代码,还需要一个过程。这个时候加载器的角色就来了,加载器将首先要加载可执行文件,并变换数据结构。在初始化之前,我们还需要进行验证和准备。解析的过程可以在初始化之前,也可以在初始化之后(实现动态加载的时候—)。触发初始化的条件有几种,分为被动引用和主动引用两大类。我们可以理解为主动引用是我们主动的触发了本Class的初始化,比如New 这个对象的实例。 但是,也存在我们在本类中引用到了其他的类,比如说父类,其他类的常量。如果,我们的操作不是上述的主动引用,其结果是没有触发本Class的初始化,而是间接的触发了别的Class进行初始化工作。我们称这个为被动引用。对于任何一个类,我们通过类和这个类的加载器共同确定在JVM中的唯一性,为了保证父类和子类的层次关系。我们在有需求触发子类的初始化时,必须先完成父类的初始化工作,一直向上追溯,从上到下依次完成初始化。这就是所谓的双亲委派模型。双亲委派模型也是可以被破坏的,在热部署技术中有应用。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/2854.html
摘要:最终形成可以被虚拟机最直接使用的类型的过程就是虚拟机的类加载机制。即重写一个类加载器的方法验证验证是连接阶段的第一步,这一阶段的目的是为了确保文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身的安全。 《深入理解Java虚拟机:JVM高级特性与最佳实践(第二版》读书笔记与常见相关面试题总结 本节常见面试题(推荐带着问题阅读,问题答案在文中都有提到): 简单说说类加载过...
摘要:二验证验证主要是为了确保文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机的自身安全。五初始化类的初始化阶段是类加载过程的最后一步,该阶段才真正开始执行类中定义的程序代码或者说是字节码。 关注我,每天三分钟,带你轻松掌握一个Java相关知识点。 虚拟机(JVM)经常出现在我们面试中,但是工作中却很少遇到,导致很多同学没有去了解过。其实除了应付面试,作为java程序员,了解...
摘要:实现这个口号的就是可以运行在不同平台上的虚拟机和与平台无关的字节码。类加载过程加载加载是类加载的第一个阶段,虚拟机要完成以下三个过程通过类的全限定名获取定义此类的二进制字节流。验证目的是确保文件字节流信息符合虚拟机的要求。 引言 我们知道java代码编译后生成的是字节码,那虚拟机是如何加载这些class字节码文件的呢?加载之后又是如何进行方法调用的呢? 一 类文件结构 无关性基石 ja...
摘要:虚拟机为了保证一个类的方法在多线程环境中被正确地加锁同步。但启动类加载器不可能认识这些代码。实现模块化热部署的关键则是它的自定义类加载器机制的实现。 概念区分:加载、类加载、类加载器 类加载是一个过程。 加载(Loading)是类加载这一个过程的阶段。 类加载器是ClassLoader类或其子类。 本文中的类的描述都包括了类和接口的可能性,因为每个Class文件都有可能代表J...
阅读 2426·2021-11-22 09:34
阅读 3362·2021-11-17 09:33
阅读 2531·2021-09-01 10:30
阅读 1517·2019-08-30 15:52
阅读 854·2019-08-29 18:40
阅读 962·2019-08-28 18:30
阅读 2245·2019-08-23 17:19
阅读 1161·2019-08-23 16:25