Java中类加载的过程
类加载过程

这里的加载过程是严格按照加载开始顺序进行的,注意是加载开始而不是加载完成。也就是有可能会有两个或几个阶段是同时进行的。
比如下面提到的验证过程中的符号引用验证是在解析阶段开始之后进行。
加载(loading):
(1)、通过一个类的全限定名来获取定义此类的二进制字节流。
(2)、将这个字节流所代表的静态存储结构转化为方法去运行时数据结构。
(3)、在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类各种数据的访问入口
连接(linking):
1、验证(verification):
(1)、文件格式验证。是否以魔术0xCAFEBABE开头、检查常量池tag标志等。
(2)、元数据验证。对字节码描述的信息进行语义分析。例如验证这个类是否有父类、在这个类的父类是否继承了不允许被继承的类(被final修饰的类)。
(3)、字节码验证:主要确定程序语义是否合法,符合逻辑的。再元数据验证后就要对类的方法体进行验证。比如保证方法体中的类型转化总是有效的。
(4)、符号引用验证:这个发生连接的第三阶段解析阶段将符号引用转化为直接引用的时候。验证该类是否缺少或者被禁止访问它依赖的某些外部类、方法、字段等资源。
2、准备(preparation):
准备阶段是正式为类中定义的变量(即静态变量)分配内存并设置类变量初始值的阶段。jdk8之后,类变量会随着Class对象一起存放在Java堆中。这里进行内存分配的仅包括类变量,而不包括实例变量,实例变量将会在对象实例化时一起分配在Java堆中。并且这里所说的初始值一般都是这个数据类型的零值。但是如果是static final定义变量就会设置为它所指定的值。
3、解析(resolution):
解析阶段是Java虚拟机将常量池内的符号引用替换为直接引用的过程。
初始化(initializing)
在准备阶段变量已经赋过一次初始零值,而在初始化阶段则会根据程序员程序编码制定的主观计划去初始化类变量和其他资源
Java中类加载的过程的更多相关文章
- java 中类加载器
jar 运行过程和类加载机制有关,而类加载机制又和我们自定义的类加载器有关,现在我们先来了解一下双亲委派模式. java 中类加载器分为三个: BootstrapClassLoader 负责加载 ${ ...
- ClassLoader Java中类加载出现在哪个阶段,编译期和运行期? 类加载和类装载是一样的吗
1.ClassLoader Java中类加载出现在哪个阶段,编译期和运行期? 类加载和类装载是一样的吗? :当然是运行期间啊,我自己有个理解误区,改正后如下:编译期间编译器是不去加载类的,只负责编译而 ...
- java中类加载顺序(深入Java)
未涉及虚拟机 0.<init>与<clinit>的区别 1.类的加载过程 2.类的使用方式 3.类的加载来源 4.重载之泛型参数不同可以吗 5.参考 引子 记得上次中秋一哥们写 ...
- Java中类加载过程和对象创建过程
类加载过程: 1, JVM会先去方法区中找有没有相应类的.class存在.如果有,就直接使用:如果没有,则把相关类的.class加载到方法区 2, 在.class加载到方法区时,会分为两部分加载:先加 ...
- Java中对象创建过程
本文介绍的对象创建过程仅限于普通Java对象,不包括数组和Class对象. 1.类加载检查 虚拟机遇到一条new指令时,首先去检查该指令的参数能否在常量池中定位到一个类的符号引用,并且检查这个符号引用 ...
- java中类加载时机
java虚拟机规范虽然没有强制性约束在什么时候开始类加载过程,但是对于类的初始化,虚拟机规范则严格规定了有且只有四种情况必须立即对类进行初始化,遇到new.getStatic.putStatic或in ...
- java中类加载的全过程及内存图分析
类加载机制: jvm把class文件加载到内存,并对数据进行校验.解析和初始化,最终形成jvm可以直接使用的java类型的过程. (1)加载 将class文件字节码内容加载到内存中,并将这些静态数据转 ...
- Java中类加载和反射技术实例
我们知道一个对象在运行时有两种类型,一个是编译类型,一个是运行时类型.在程序运行时,往往是需要发现类和对象的真实的信息的.那么如何获的这种信息呢? 其一,如果我们在编译和运行时都知道类型的具体信息,这 ...
- Java中对象初始化过程
Java为对象初始化提供了多种选项. 当new一个对象的时候,对象初始化开始: 1.首先,JVM加载类(只加载一次,所以,即使多次new对象,下面的代码也只会在第一次new的时候执行一次),此时, 静 ...
随机推荐
- ORA-12609报错分析
问题:监控不断告警ORA-12609 Wed 10/14/2020 10:40 AM 12CRAC1-ALERT中出现ORA错误,请检查 171- nt OS err code: 0 172- Cli ...
- 国云数据:中国版的Snowflake,国内数据中台领导者
[股神巴菲特加持,今年最受关注美股IPO ] 这段时间, 由股神巴菲特54年来首次打新的美股IPO公司Snowflake迅速得到业界重点关注.Snowflake已于2020年9月16日正式上市,发行价 ...
- Luogu P4546 [THUWC2017]在美妙的数学王国中畅游
题意 题意奇奇怪怪,这里就不写了. \(\texttt{Data Range:}1\leq n\leq 10^5,1\leq m\leq 2\times 10^5\) 题解 为什么你们都是卡在数学方面 ...
- nb-iot技术能自组网吗
NB-IoT是运营商主导的网络,运营在授权频段上,LoRa运营在开放频段上,可以由企业自主建设.NB-IoT构建于蜂窝网络,只消耗大约180KHz的带宽,可直接部署于GSM网络.UMTS网络或LTE网 ...
- 阅读源码,通过LinkedList回顾基础
目录 前言 类签名 泛型 Serializable和Cloneable Deque List和AbstractList RandomAccess接口(没实现) 变量 构造函数 常用方法 List体系下 ...
- 解决pl/sql developer中数据库插入数据乱码问题
最近学习SSM项目开发,用到oracle数据库, 使用管理软件PL/sql developer往数据库表中插入数据时记录乱码. 结果如下: 可以看到中文数据都乱码成了???????问号, 看了网上各 ...
- trie 树(字典树)
目录 简述 trie 实现 前言 初始化 插入 检索 代码实现 例题 · 前缀统计 异或对 前言 贪心证明 代码实现 例题 · 最长异或值路径 可持久化 trie 树 简介 原理 代码实现 例题 总结 ...
- uniapp微信小程序分享
触发代码 如: <button open-type="share">分享</button> 在JS中 分享进入页面传参,和微信小程序路由传参的思路是一样的. ...
- Python UnboundLocalError: local variable 'xxx' referenced before assignment 解决方法
一.报错含义: val=9 def test(): print(val) val = 6 print(val) test() 翻译:本地变量xxx引用前没有定义. 二.报错原因 这是Python变量作 ...
- html+js+highcharts绘制圆饼图表的简单实例
下面我就为大家带来一篇html+js+highcharts绘制圆饼图表的简单实例.我觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随我过来看看吧 实例如下: 1 2 3 4 5 6 7 8 ...