JVM简明笔记3:类加载机制】的更多相关文章

一.类加载时机 1.1 触发类初始化的六个场景: 加载? 1.遇到new.getstatic.putstatic或invokestatic这四条字节码指令时 如果类型没有进行过初始化,则需要先触发其初始化阶段.生成这四条指令的Java代码场景是: 使用new关键字实例化对象的时候 读取或设置一个类型的静态字段(被final修饰.已在编译期把结果放入常量池的静态字段除外)的时候 调用一个类型的静态方法的时候 2. 使用java.lang.reflect包的方法对类型进行反射调用的时候,如果类型没有…
一.概述 虚拟机类加载机制:虚拟机把描述类的数据从Class文件中加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型. 与那些在编译时需要进行连接工作的语言不同,在Java语言里面,类型的加载.连接和初始化过程都是在程序运行期间完成的,这种策略虽然会令类型加载时稍微增加一些性能开销,但是会为Java应用程序提供高度的灵活性,Java里天生可以动态扩展的语言特性就是依赖运行期间动态加载和动态连接这个特点实现的. 二.类加载的时机 类从被加载到虚拟机内存中开始…
目录 概述 动态加载和动态连接 类加载的时机 类的生命周期 被动引用 例子一(调用子类继承父类的字段) 例子二(数组) 例子三(静态常量) 类加载的过程 加载 验证 准备 解析 符号引用 直接引用 初始化 类加载器 类与类加载器 双亲委派模型 启动类加载器(Bootstrap ClassLoader) 扩展类加载器(Extension ClassLoader) 应用程序类加载器(Application ClassLoader) 工作过程 优点 实现 概述 虚拟机把描述类的数据从Class文件加载…
一. 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程序运行图: 上一篇玩命学JVM(一)-认识JVM和字节码文件我们简单认识了 JVM 和字节码文件.那JVM是如何使用字节码文件的呢?从上图清晰地可以看到,JVM 通过类加载器完成了这一过程. 以下是类加载机制的知识框架: 接下来我们对思维导图中重难点部分做补充. 1. 是什么? 类的加载就是将 .class 文件的二进制数据读入到内存中,将其放在 JVM 的运行时数据区的方法区内.然后在堆区内创建一个 java.lang.Class 对象,用于封装类在方法区内的数据结构. 5.…
概述: 上一篇文章,介绍了java虚拟机的运行时区域,Java虚拟机根据不同的分工,把内存划分为各个不同的区域.在java程序中,最小的运行单元一般都是创建一个对象,然后调用对象的某个 方法.通过上一篇文章我们知道调用某个方法是通过虚拟机栈的栈帧并通过执行引擎来实现的,但是实际上一个方法的执行前提是,该对象对应的Class文件需要加载到内存的方法区,并且 要new一个对象,对象的引用存放在虚拟机栈的本地变量表,对象的实例存放在堆.本篇文章关注的重点就是Java虚拟机如何将Class文件加载到内存…
系列文章目录和关于我 一丶虚拟机类加载机制是什么 java虚拟机将描述类的数据从class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可用被虚拟机直接使用的java类型. 二丶类加载时机 1.什么时候会触发虚拟机的类类加载昵? 遇到new(使用new关键字实例化对象),getstatic(读取一个类的静态非final字段),putstatic(设置一个类的非final静态字段),或invokestatic(调用一个类型的静态方法)这些字节码指令的时候,如果类没有经过初始化,那么需…
虚拟机把描述类的数据从Class文件夹加载到内存,并对数据进行小燕.转换解析和初始化,最终形成可以被虚拟机直接使用的java类型,这就是虚拟机的类加载机制. 下面所说的Class文件不是具体的某个文件,应当是一串二进制的字节流,无论何种形式存在都可以. 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期:加载(Loading),验证(Verification),准备(Preparation),解析(Resolution).初始化(Initializatin),是哦那个(Using)…
Java虚拟机类加载过程是把Class类文件加载到内存,并对Class文件中的数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的java类型的过程. 在加载阶段,java虚拟机需要完成以下3件事: a.通过一个类的全限定名来获取定义此类的二进制字节流. b.将定义类的二进制字节流所代表的静态存储结构转换为方法区的运行时数据结构. c.在java堆中生成一个代表该类的java.lang.Class对象,作为方法区数据的访问入口. Java虚拟机的类加载是通过类加载器实现的, Java中…