Appearance
JVM加载一个类的过程一般分为三个阶段:加载、连接和初始化。
JVM加载一个类时,首先通过类加载器找到类的字节码然后进行验证、准备和解析,最后执行类的静态代码块和静态变量的赋值操作。
1.谁来负责将Class文件加载到内存
- 类装载器负责加载Class文件,Class文件再文件开头特定的文件标识(CA FE BA BE)
- 类装载器只负责加载,是否可以允许由执行引擎(Execution Engine)决定
2.class文件存在内存哪个位置
类加载器从class文件抽取类信息放在方法区,类信息:方法代码,变量名,方法名,访问权限,返回值等等。
3.Class对象存储在哪里
堆。每当加载器从class文件加载一个类时都会加载类信息到方法区,同时生成class对象,Class对象new对各对象实例。
一个类什么时候进入JVM?
- 虚拟机启动时,执行main()方法的时候
- new对象的时候
- 读取静态字段或静态方法的时候
一个类进入JVM后经历了什么
类从被加载到虚拟机内存中开始,到GC卸载出内存为止,它的整个生命周期包括:
- 加载、验证、准备、解析、初始化、使用和卸载七个阶段。
其中,加载、验证、准备、初始化、卸载这五个阶段发生的顺序是确定的,而解析阶段则不一定,它在某些情况下可以在初始化阶段之后开始。另外这7个阶段通常都是互相交叉的混合式进行的,通常会在一个阶段执行的过程中调用或激活另外一个阶段。