文档章节

jvm类加载、初始化

110hxl
 110hxl
发布于 2014/08/05 18:20
字数 469
阅读 32
收藏 0


jvm类加载
1、通过一个类的全限定名来获取定义此类的二进制字节流;
2、将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构;
3、在java堆中生成一个代表这个类的java.lang.Class对象,作为访问入口;
这里未限定获取二进制流的方式,可以通过各种途径得到,包括jar,war等压缩包、网络、运行时生成(动态代理)、数据库中...等
加载->验证->准备->(解析->初始化)->使用->卸载

   验证就不说了...

准备:
这个阶段正式的为类变量分配内存,并设置初始值,内存将分配在方法区中;
必须强调的是这个阶段分配的是类的变量(static),不是实例的变量(分配在堆中);
public static int value =123;
这个阶段分配后value = 0;而不是123;这个阶段尚未执行任何java方法。而把value赋值为123的指令putstatic指令是程序被编译后,存放于类构造器<clinit>()方法中(在初始化阶段,并非是实例构造器(构造函数));然而:
public static final int value = 123;将会在这个阶段设为123(先为0然后是123);
解析:
解析的过程是虚拟机讲常量池内的符号引用替换为直接引用的过程;
触发初始化场景:
1、new关键字
2、使用java.lang.reflect,反射调用;
3、main函数,包含main的类;
4、子类被初始化;
不触发初始化的场景:
1、调用的是父类的静态域;
2、生命某个类的数组,不会触发某个类的初始化;
3、调用某个类的静态字段不会触发当前类的初始化;



参考:《深入理解java虚拟机》






© 著作权归作者所有

上一篇: 方法的分派
下一篇: 程序计数器
110hxl
粉丝 6
博文 211
码字总数 54059
作品 0
深圳
程序员
私信 提问
谈java中类的加载、链接和初始化

Java字节代码的表现形式是字节数组(byte[]), 而Java类在JVM中的表现形式是java. lang. Class类的对象。 一个Java类从字节代码到能够在JVM中被运用, 需要经过加载、链接和初始化这三个步骤。...

风一样
2011/08/03
0
0
JVM规范系列第5章:加载、链接与初始化

加载是根据特定名称查找类或接口类型的二进制表示(Binary Representation),并由此二进制表示创建类或接口的过程。 加载,就是指去寻找类或接口的过程。 链接是为了让类或接口可以被 Java...

陈树义
2018/12/19
0
0
03-《深度拆解JVM》之Java虚拟机是如何加载Java类的?

一、JVM的类加载 Java 虚拟机中的类加载,从 class 字节码文件到内存中的类,按先后顺序需要经过加载、链接以及初始化三大步骤。其中,链接过程中同样需要验证;而内存中的类没有经过初始化,...

飞鱼说编程
2018/09/13
0
0
Java核心机制:反射机制的原理及应用方法

一、java的核心机制 java有两种核心机制:java虚拟机(JavaVirtual Machine)与垃圾收集机制(Garbage collection): 1、Java虚拟机:是运行所有Java程序的抽象计算机,是Java语言的运行环境,在...

Java架构资源分享
2018/11/25
0
0
两道面试题,带你解析Java类加载机制

文章首发于【博客园-陈树义】,点击跳转到原文《两道面试题,带你解析Java类加载机制》 在许多Java面试中,我们经常会看到关于Java类加载机制的考察,例如下面这道题: 请写出最后的输出字符...

陈树义
2018/06/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

好文:华杉:我等用功,不求日增,但求日减。减一分人欲,则增一分天理,这是何等简易!何等洒脱!

#写在前面1.怎么理解“减一分人欲,则增一分天理,这是何等简易!”?1)华杉提倡 “一劳永逸” 排除浪费,少干活,多赚钱,一战而定,降低作业成本。2)华杉提倡学海无涯,回头是岸...

阿锋zxf
20分钟前
2
0
vue 的bus总线

bus声明 global.bus = new Vue() 事件发送 controlTabbar () {global.bus.$emit('pickUp', 'ddd')}, 事件接收 global.bus.$on('pickUp', (res) => {this.isFocus = true})......

Js_Mei
25分钟前
2
0
大型系统演进之路-负载均衡演进

Nginx做负载均衡 通过Nginx的反向代理将请求分发到tomcat中,如果tomcat支持100并发,Nginx支持50000并发,理论上nginx把请求发送到500个tomcat就可以了。 LVS或F5做多个Nginx负载均衡 Tomc...

春哥大魔王的博客
30分钟前
4
0
Sqlite时间段查询中遇到的问题

问题: 我要查询DateTime时间其中的一段符合时间要求的数据,比如我要查询‘2019-06-06 16:50:00’至‘2019-06-06 16:59:00’这一段的数据 开始用这段代码 strSql= ("select * from Coll...

rainbowcode
34分钟前
2
0
大数据(hadoop-数据入库系统Sqoop原理架构)

Sqoop是什么 Sqoop:SQL-to-Hadoop 连接传统关系型数据库和Hadoop的桥梁 把关系型数据库的数据导入到 Hadoop 系统 ( 如 HDFS、HBase 和 Hive) 中; 把数据从 Hadoop 系统里抽取并导出到关系型...

这很耳东先生
48分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部