Java学习之类加载全过程_JVM内存分析_反射机制核心原理_常量池理解
2015-03-14 23:14
1651 查看
一、类加载机制
JVM把class文件加载到内存,并对数据进行校验,解析和初始化,最形成JVM可以直接使用的JAVA类型的过程。加载-->链接(-->验证-->准备-->解析)-->初始化-->使用-->卸载
1.加载
将class文件字节码内容加载到内存中,并将这些静态数据转换成方法区中的运行时数据结构,在堆中生成一个代表这个类的java.lang.Class对象,作为方法区类数据的访问入口。class字节码-->类加载器-->内存(Class对象,方法区中运行时数据) -->外部可以通过Class对象,操作类
2.链接
将java类的二进制代码合并到JVM的运行状态之中的过程验证:确保加载的类信息符合JVM规范,没有安全方面的问题。
准备:正式为类变量(static变量)分配内存并设置变量初始值的阶段,这些内存都将在方法区中进行分配。
解析:虚拟机常量池内的符合引用替换为直接引用的过程。
常量池(类名,字符串,方法名,代码等等)
3.初始化
初始化阶段是执行类构造器<clinit>()方法的过程。类构造器<clinit>()方法是由编译器自动收集类中的所有类变量的赋值动作和静态语句(static)块中的语句合并产生的。当初始化一个类的时候,如果发现其父类还没有进行过初始化、则需要先执行父类的初始化
虚拟机会保证一个类的<clinit>()方法在多线程中被正确加锁和同步。
当访问一个java类的静态域时,只有真正声明这个域才会被初始化。
图:转在尚学堂
二、主动引用和被动引用
主动引用:(一定会发生类的初始化)
new一个类的对象调用类的静态成员(除了final常量)和静态方法
使用java.lang.reflect包的方法对类进行反射调用
当虚拟机启动,java hello,则一定会初始化hello类,说白了就是先启动main方法所在的类
当初始化一个类,如果其父类没有被初始化,则先会初始化他的父类
被动引用:(不会发生类的初始化)
当访问一个静态域时,只有真正声明这个域的类才会被初始化通过子类引用父类的静态变量,不会导致子类初始化
通过数组定义类引用,不会触发此类的初始化
引用常量不会触发此类的初始化(常量在编译阶段就存入调用类的常量池中了)
域就是属性
public class TestInit { static{ System.out.println("TestInit"); } public static void main(String[] args) throws ClassNotFoundException { //主动引用 //1.new一个类的对象 //new A(); //2.调用类的静态成员(除了final常量)和静态方法 //System.out.println(A.id); //System.out.println(A.age); //3使用java.lang.reflect包的方法对类进行反射调用 //Class a = Class.forName("Loader.A"); //当虚拟机启动,java hello,则一定会初始化hello类,说白了就是先启动main方法所在的类 //System.out.println(A.num); A[] a = new A[10]; } } class A extends A_Fahter{ public static int id=3; public static final int age = 4; static{ System.out.println("A"); } } class A_Fahter{ public static int num =3; static{ System.out.println("A_Fahter"); } }
相关文章推荐
- 【Java面试整理之JVM】深入理解JVM结构、类加载机制、垃圾回收GC原理、JVM内存分配策略、JVM内存泄露和溢出
- JVM核心机制_类加载全过程JAVA218-219
- 223_尚学堂_高淇_java300集最全视频教程_JVM核心机制_线程上下文类加载器_web服务器类加载机制_OSGI技术模块开发原理介绍
- Java核心技术再理解——Java中类的加载原理分析
- java核心机制——jvm运行以及类加载全过程
- Java高新技术【4】 反射机制 及 Java类加载原理及类加载器
- Java 学习笔记 (13) - 基本内存分析 和 垃圾回收机制
- 深入理解JVM学习笔记-自动内存管理机制
- JVM核心机制,类加载全过程
- Java高新技术(二)之类加载机制和反射
- java中类加载的全过程及内存图分析
- 深入理解Java:类加载机制及反射
- 学习:java原理—反射机制
- JVM学习笔记(1、 基本结构;2、Java代码编译和执行的整个过程3、内存管理和垃圾回收 4、 内存调优 )
- 【Java高级】JVM内存区域模型和加载过程
- 理解Java常量池--从JVM原理上理解字符串的比较
- java 底层 之 辅助理解JVM内存机制扩展CPU和网络传输协议知识
- 黑马程序员--反射机制和类加载器--java学习日记12(高新技术)
- Java学习之反射机制的理解
- java 反射机制与动态加载类学习要点