编译时 VS 运行时
编译时将 Java 源文件编译成 字节码 Class文件。
运行时将对 Class 文件进行类加载。
类加载就是指 虚拟机 加载 Class 文件到内存的过程。
该过程包括
1. 对数据的校验
2. 转换解析
3. 初始化
关于动态加载, 是指运行期再指定其具体的实现。 比如在使用接口的时候,到运行时采取指定其具体的实现。
----------------------------- 我是分割线 -----------------------------
类的生命周期
1. 加载
2. 验证 (连接)
3. 准备 (连接)
4. 解析 (连接)
5. 初始化
6. 使用
7. 卸载
加载-
1. 通过类的权限定名 com/vrplat/Test 加载类的二进制流
2. 将二进制流结构转换成方法区的数据结构 (不同的JVM不同的实现)
3. 在堆中生成一个Class对象
验证-
1. 文件格式验证 (开头的魔术,版本号,编码等等。。)
2. 元数据验证 (语义分析, 比如是否继承了一个final的类, 是否重写了final的方法)
3. 字节码验证 (比如,类型转化,父类强制转化成子类验证就会出错)
4. 符号引用验证 (比如:通过权限定名能否找到类,当前类对其他类/字段/方法的访问性private/protected/public/default)
准备-
1. 就是给类变量(静态变量)分配内存并设置零值的过程。
2. 比如: public static int value = 123; 准备过程就是在方法区给value分配内存并将其赋零值0. 而真正的值123要等到初始化的时候才确定。
解析-
1. 将符号引用替换成直接引用
2. 符号引用在验证阶段只是确定能否找到该类,或者说是Class文件。而将它替换成直接引用之后则是可以直接在内存中访问到。
需要初始化的几种场景
1. 虚拟机启动的时候,要初始化一个可执行的类(包括main方法的那个类)
2. 当碰到new, getstatic, putstatic, invokestatic字节码指令的时候, 如果类没有初始化则要先初始化 (读取直接静态字段-非父类的字段,final常量在编译期间就已经初始化好了,不在此内)
3. 当初始化一个类时发现父类还没有初始化,则要先初始化父类。 而对于接口来说,只有当真正使用到父接口(比如引用父接口的常量)才会对父接口的初始化
4. 使用反射的时候
分享到:
相关推荐
JVM实战-JVM类加载机制案例分析
jvm 类加载机制 双亲委派模型 文档 jvm 类加载机制 双亲委派模型 文档
锁以及jvm类加载机制
讲解JVM的ClassLoader子系统原理.
从JDK源码级别剖析JVM类加载机制
性能调优专题-jvm类加载机制-performance-jvmclassloader
JVM类加载过程
1. 类的静态变量 2. 类的静态代码块 3. 类的静态变量 4. 类的静态代码块 5. 类的静态变量 6. 类的静态代码块 7. 类的构造法 8. 类的静态变
Java的类加载机制是java技术体系中比较核心的部分,虽然和大部分开发人员直接打交道不多,但是对其背后的机理有一定理解有助于排查程序中出现的类加载失败等技术问题,对理解java虚拟机的连接模型和java语言的动态性...
本文主要介绍了JVM类加载机制的相关知识,具有很好的参考价值,下面跟着小编一起来看下吧
主要介绍了一文读懂Jvm类加载机制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
主要给大家介绍了关于JVM类加载机制及类缓存问题的处理方法的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
主要介绍了JVM类加载机制原理及用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
对jvm内存模型&垃圾收集算法&类加载机制进行了整理,读者可以作为参考进行学习和探讨,,
详细介绍了JVM执行子系统的工作原理,包括类文件结构与字节码指令(Class类文件结构、JVM字节码指令简介)、JVM类加载机制(类加载器、类加载时机、类加载过程)、字节码执行引擎(运行时候的栈结构、方法调用、方法...
java中JVM类加载器和双亲委派机制剖析,类加载示例、加载器示例、自定义一个类加载器示例;Tomcat自定义加载器详解
该文件是JVM中关于类加载机制的知识整理的思维导图,包括类加载机制概述、类加载的生命周期、加载时机、加载过程、类加载、类的初始化和实例化等几个大方面进行了讲解,其中类加载中还对JVM三种预定义类加载器进行了...
介绍Java类的加载机制,对于深入理解Java的深层原理很有帮助
Jvm类加载机制 Java中的锁机制 Java按行读取txt中的内容 - 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制 - ...
JVM类加载机制 JVM运行时区数据 JVM执行引擎和垃圾回收 基础语法 理解Java中对象基础Object类 基本数据类型,核心点整理 特殊的String类,以及相关扩展API 日期与时间API详解 流程控制语句,和算法应用 函数式编程...