<深入理解 Java 虚拟机>学习 -- 类加载机制 1. 概述 虚拟机把描述类的数据从 Class 文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的 Java 类型,这就是虚拟机的类加载机制. 2. 类加载的时机 2.1 类的生命周期: 加载 --> 连接(验证 --> 准备 --> 解析)--> 初始化 --> 使用 --> 卸载 其中,加载.验证.准备.初始化和卸载这五个阶段的顺序是确定的,类的加载过程必须按照这种顺序…
前言 Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被称为虚拟机的类加载机制. 类加载的时机 一个类型从被加载到虚拟机内存中开始,到卸载除内存为止,它的生命周期将会经历加载(Loading).验证(Verification).准备(Preparation).解析(Resolution).初始化(Initialization).使用(Using)和 卸载(Unloading).七个阶段,其中验证.准备…
前言 上一篇我们介绍到一个类的生命周期大概分7个阶段:加载.验证.准备.解析.初始化.使用.卸载.并且也介绍了类的加载时机,下面我们将介绍一下虚拟机中类的加载的全过程.主要是类生命周期的,加载.验证.准备.解析和初始化这五个阶段所执行的具体动作. 加载 类加载过程的第一个阶段就是加载,在加载阶段,Java虚拟机需要完成以下三件事情: 1. 通过一个类的全限定名来获取定义此类的二进制字节流. 2. 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构. 3. 在内存中生成一个代表这个类的j…
前言 JDK的bin目录中有一系列的小工具,除了java.exe.javac.exe这两个编译和运行Java程序外,还有打包.部署.签名.调试.监控.运维等各种场景都会用到这些小工具. 这些工具根据软件可用性和授权的不同,可以把它们划分为三类: 商业授权工具: 主要是JMC(Java Mission Control)及它要使用到的JFR(Java Flight Recorder),JMC在个人开发环境中使用是免费的,但是在商业环境中使用它则是付费的. 正式支持工具: 这一类工具属于被长期支持的工…
一. java虚拟机的内存模型如图: 补习一下jvm内存模型中的各个组成部分 堆: 我们new出来的对象全部放在堆中,他是jvm所能够动态分配的最大的一块空间 优点: 内存动态分配,生命周期不必事先告诉编译器,由JAVA的垃圾回收线程动态回收 栈: 存取的速度仅次于CPU的寄存器,但是存在栈里面的数据大小必须是提前定义的比如大家都知道int 4个字节 jvm在调用某些方法时,方法的参数,以及局部变量就存放在栈里面,(因为它们符合内存空间已知的特性) 主函数在栈的最底部 栈是有线程特性的,每个线程…
Class类文件的结构 任何一个Class文件都对应着唯一一个类或接口的定义信息,但反过来说,类或接口并不一定都得定义在文件里(类和接口也可以用反射的方式通过类加载器直接生成) Class文件时一组以8位字节为基础单位的二进制流,各个数据都严格按照顺序紧凑排列在Class文件中,没有任何分隔符. Class文件格式采用一种类似C语言结构体的伪结构存储数据,这种结构中只包含无符号数和表两种类型. 无符号数 无符号数属于基本数据类型,以u1.u2.u4.u8来分别代表1个字节.2个字节.4个字节.8…
类加载概述 在java代码中,类型的加载.连接与初始化过程都是在程序运行期间完成的 类型:class.interface(object本身).类型可在运行期间生成,如动态代理.一种runting概念 加载:最常见的方式是将已经存在的类的字节码文件(.class文件)从磁盘上加载到内存中: 连接:将类与类之间的关系确立下来,对于字节码的一些相关处理.校验在连接阶段完成 初始化:对于一些静态的变量进行复制 过程不是一定按照上述顺序,按照规范即可 提供了更大的灵活性,增加了更多的可能性 本身是静态类型…
类加载器的父亲委托机制 在父亲委托机制中,各个类加载器按照父子关系形成了树形结构,除了根类加载器之外,其余的类加载器都有且只有一个父加载器. 先让最顶层可以加在的父加载器加栽(所有可加载的加载器中,处于最顶层的那一个加载器加载,如果都不能加载,则失败) Bootstrap ClassLoader 启动类加载器 $JAVA_HOME中jre/lib/rt.jar里所有的class,由c++实现,不是ClassLoader的子类 Extension ClassLoader 扩展类加载器 负责加载ja…
前言 Java程序运行图: 上一篇玩命学JVM(一)-认识JVM和字节码文件我们简单认识了 JVM 和字节码文件.那JVM是如何使用字节码文件的呢?从上图清晰地可以看到,JVM 通过类加载器完成了这一过程. 以下是类加载机制的知识框架: 接下来我们对思维导图中重难点部分做补充. 1. 是什么? 类的加载就是将 .class 文件的二进制数据读入到内存中,将其放在 JVM 的运行时数据区的方法区内.然后在堆区内创建一个 java.lang.Class 对象,用于封装类在方法区内的数据结构. 5.…
了解类加载机制也是深入了解Java的重要一环,它包括加载过程.类加载器.加载机制等内容. 以下是我总结的思维导图. 首先讲讲类加载的时机,以下是会触发类加载的时机: 1.new.get/put/invoke+static  new 一个类,或访问它的静态方法或常量时. 2.reflect包的方法 3.初始化一个类,其父类需初始化 4.main函数类 5.MethodHandle实例最后的解析结果REF_get/put/invoke方法 类加载器及类加载机制 Java中有3种类加载器,1.Boot…