JAVA虚拟机类加载过程
2017-05-05 21:44
204 查看
一,类加载的时机
类从被加载到虚拟机内存开始,到卸载内存结束,它的整个生命周期包括:加载,验证,准备,解析,初始化,使用和卸载七个阶段。其中验证,准备和解析部分统称为连接。
什么情况下加载?虚拟机没有进行强制规范。但是初始化阶段,虚拟机则严格规定有且仅有五种情况下必须进行类的初始化。
遇到new,getstatic,putstatic或invokestatic者四条字节码指令时,如果类没有进行过初始化,则需要先触发其初始化。
对类进行反射的时候,如果类没有进行过初始化,则需要先触发其初始化
当初始化一个类的时候,如果发现其父类没有进行初始化,则需要先触发其父类进行初始化
当虚拟机启动时,main方法会被先初始化
当动态解析出现方法句柄的时候,并且这个方法句柄对应的类没有进行过初始化的时候,则需要先触发其初始化
二,类加载过程
简介类加载各个过程及其要做的任务
加载 :首先需要通过一个类的全限定名来获取定义此类的二进制字节流,然后将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构,最后在内存中生成一个代表这个类的class对象,作为方法区这个类的各种数据的访问入口。
验证:为了确保class文件的字节流包含的信息符合当前虚拟机的要求,并且不会危害虚拟机的自身安全
准备:正式为类变量分配内存并设置类变量的初始值,这些变量所使用的内存都将在方法去分配
解析:虚拟机将常量池中的符号引用替换为直接引用
初始化:初始化阶段开始执行类的类构造器
类从被加载到虚拟机内存开始,到卸载内存结束,它的整个生命周期包括:加载,验证,准备,解析,初始化,使用和卸载七个阶段。其中验证,准备和解析部分统称为连接。
什么情况下加载?虚拟机没有进行强制规范。但是初始化阶段,虚拟机则严格规定有且仅有五种情况下必须进行类的初始化。
遇到new,getstatic,putstatic或invokestatic者四条字节码指令时,如果类没有进行过初始化,则需要先触发其初始化。
对类进行反射的时候,如果类没有进行过初始化,则需要先触发其初始化
当初始化一个类的时候,如果发现其父类没有进行初始化,则需要先触发其父类进行初始化
当虚拟机启动时,main方法会被先初始化
当动态解析出现方法句柄的时候,并且这个方法句柄对应的类没有进行过初始化的时候,则需要先触发其初始化
二,类加载过程
简介类加载各个过程及其要做的任务
加载 :首先需要通过一个类的全限定名来获取定义此类的二进制字节流,然后将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构,最后在内存中生成一个代表这个类的class对象,作为方法区这个类的各种数据的访问入口。
验证:为了确保class文件的字节流包含的信息符合当前虚拟机的要求,并且不会危害虚拟机的自身安全
准备:正式为类变量分配内存并设置类变量的初始值,这些变量所使用的内存都将在方法去分配
解析:虚拟机将常量池中的符号引用替换为直接引用
初始化:初始化阶段开始执行类的类构造器
相关文章推荐
- java虚拟机类加载的过程
- Java虚拟机中类加载过程 MindJet整理
- Java虚拟机类加载过程
- Java虚拟机学习 - 类加载过程
- Java虚拟机知识整理——类加载的过程
- java虚拟机类加载过程内存情况底层源码分析及ClassLoader讲解
- Java虚拟机 类加载的过程
- Java虚拟机 类加载过程与机制
- jvm-java虚拟机类加载过程
- 理解Java虚拟机(2)之.class文件加载过程
- Java虚拟机 类加载的过程
- java虚拟机的类加载过程
- java虚拟机类加载过程内存情况底层源码分析及ClassLoader讲解
- JAVA虚拟机(JVM)——类加载的过程(加载、验证、准备、解析、初始化)
- Java虚拟机类加载过程
- [深入理解Java虚拟机]第七章 类加载的过程
- 深入理解Java虚拟机 第七章 虚拟机类加载时机与过程
- java虚拟机类加载机制 ——类加载的过程
- Java虚拟机类加载的过程
- Java虚拟机-类加载器和类加载过程