简单理解Java类加载机制
2017-10-13 10:08
267 查看
JSON Code
![](http://img.blog.csdn.net/20171013100909967?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbHl6eF9pbl9jc2Ru/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
视频教程: http://pan.baidu.com/s/1i53n9IX(尚学堂高琪jvm)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | Java类加载的全过程 1、加载 >>将class文件放入内存,并将静态的二进制代码转换成方法区中运行时的数据结构(在方法区进行) 并产生一个java.lang.Class(位于堆中) 比如说现在有一个T.java的文件,使用命令行javac T.java将.java文件编译为.class文件,在程序中使用到T这个类时,类加载其就把T.class这个文件 从硬盘(.class文件不仅仅来自硬盘,说白了.class文件就是一个字节数组)中加载到内存中,把.class文件中包含的类信息(静态数据)放入内存并组装为 运行时数据结构,然后在堆里面创建一个和类T相关的java.lang.Class的实例,这个实例可以指向方法区中的类信息(静态域,静态方法,静态块,类的代码等) **这也是反射的核心,通过某个类对应的Class文件找到类的各个属性(字段,方法,构造器等) **t3指向T3类的实例对象,t3类的实例对象有一个引用指向了其对应的java.lang.Class的实例,该实例有一个引用指向了方法区中T3类对应的类型信息 2、链接 将java类的二进制代码合并到jvm的运行状态之中的过程 验证:确保加载的class文件符合jvm的规范,没有安全问题 准备:正式为类变量(static变量)分配内存并设置其初始值(在方法区中进行) 连接:将虚拟机中的符号引用替换为直接引用 3、初始化 初始化的过程是执行类构造器<clinit>的过程,由编译器自动收集静态方法块和静态变量生成类构造器并执行 T3中的静态变量a和静态代码块组成了类构造器(类构造器按照代码中先后顺序组装),在初始化的时候加载这个类构造器 虚拟机能保证一个类构造器<clinit>在多线程环境中正确的加锁同步 **有时候单例就是利用这个特性 初始化的过程中如果发现其父类没有初始化就先初始化其父类 |
视频教程: http://pan.baidu.com/s/1i53n9IX(尚学堂高琪jvm)
相关文章推荐
- 深入理解Java类加载机制
- 简单理解Java虚拟机类加载机制
- java类加载机制的简单知识
- 深入理解和探究Java类加载机制
- 深入理解Java类加载机制
- Java类加载机制的理解
- php 命名空间 和 自动加载机制 的简单理解
- 理解Java类加载机制(译文)
- 深入理解java类加载机制
- 深入理解Java类加载机制(1)
- 深入理解Java类加载机制(2)--类加载器及双亲委派模型
- 深入理解和探究Java类加载机制
- java类加载机制
- 《深入理解JVM》--JVM类加载机制总结
- 深入理解Java中类加载的流程和机制
- 深入理解Java:类加载机制及反射
- PHP autoload与spl_autoload自动加载机制的深入理解
- 深入理解JVM07--虚拟机类加载机制--类加载器、双亲委派模型
- spring事务隔离和传播机制的简单理解
- Java类编译、加载、和执行机制