jvm之类加载机制

1、什么是类加载机制?java

JVM把class文件加载到内存里面,并对数据进行校验、准备、解析和初始化,最终造成能够被JVM能够直接使用的Java类型的过程。安全

2、类加载的时机数据结构

一、生命周期优化

 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个阶段。它们开始的顺序以下图所示:对象

 其中类加载的过程包括了加载、验证、准备、解析、初始化五个阶段。生命周期

二、类初始化情形内存

类加载时机没有强制约束,但“初始化”阶段有明确的规定,如下情形会当即被初始化:get

  • 使用new关键字实例化对象、访问或者设置一个类的静态字段(被final修饰、编译器优化时已经放入常量池的例外)、调用类方法,都会初始化该静态字段或者静态方法所在的类。
  • 初始化类的时候,若是其父类没有被初始化过,则要先触发其父类初始化。
  • 使用java.lang.reflect包的方法进行反射调用的时候,若是类没有被初始化,则要先初始化。
  • 虚拟机启动时,用户会先初始化要执行的主类(含有main)
  • jdk 1.7后,若是java.lang.invoke.MethodHandle的实例最后对应的解析结果是 REF_getStatic、REF_putStatic、REF_invokeStatic方法句柄,而且这个方法所在类没有初始化,则先初始化。

3、类加载的过程编译器

  • 加载:
  1. 将class文件加载在内存中。
  2. 将静态数据结构(数据存在于class文件的结构)转化成方法区中运行时的数据结构(数据存在于JVM时的数据结构)。
  3. 在堆中生成一个表明这个类的java.lang.Class对象,做为数据访问的入口。
  • 验证:确保加载的类符合JVM规范与安全。
  • 准备::为static变量在方法区中分配空间,设置变量的初始值。
  • 解析:虚拟机将常量池的符号引用转变成直接引用。
  • 初始化:执行类构造器方法的过程
相关文章
相关标签/搜索