java类型生命周期的详细解析

zhyang3e

zhyang3e

2016-02-19 09:01

最近很多朋友喜欢上设计,但是大家却不知道如何去做,别担心有图老师给你解答,史上最全最棒的详细解说让你一看就懂。

开始阶段

装载:把二进制形式的java类型读入jvm中。
1)通过该类型的完全限定名,产生一个代表该类型的二进制数据流;
2)解析这个二进制数据流为方法区内的内部数据结构;
3)创建一个表示该类型的java.lang.Class类的实例;

连接:把已读入的类型数据合并到虚拟机的运行时状态中。
1)验证:确保java类型数据格式正确并且适用于jvm使用;
2)准备:为该类型分配内存;
3)解析:把常量池中的符号引用转换为直接引用;

初始化:每个类和接口在首次主动使用时初始化。为类变量赋予正确的初始值;
1)如果类存在直接超类,且直接超类没有被初始化,先初始化直接超类;
2)如果类存在初始化方法,就执行此方法;

只有六种活动被认为是主动使用:
1)、创建类的新实例
2)、调用类中声明的静态方法
3)、操作类或者接口中声明的非常量静态字段
4)、调用Java API中特定的反射方法
5)、初始化一个类的子类
6)、指定一个类作为jvm启动时的初始化类

使用阶段(绝大部分时间)

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

实例化

实例化途径
明确实例化一个类的四种途径:
1)、new操作符;
2)、调用Class或者Java.lang.reflect.Constructor对象的newInstance()方法;
3)、调用任何现有对象的Clone()方法;
4)、通过java.io.ObjectInputStream类的getObject()方法反序列化;

隐含实例化的几种途径:
1)、保存命令行参数的String对象;
2)、和类装载相关,jvm装载的每一个类型,会暗中实例化一个Class对象来代表这个类型;
3)、和类装载相关,当jvm装载了在常量池中包含CONSTANT_String_info入口类的时候,会创建新的String对象的实例来表示这些常量字符串;
4)、通过执行包含字符串连接操作符的表达式产生对象;

实例化步骤
1)、在堆中为保存对象的实例变量分配内存;
2)、为实例变量初始化为默认的初始值;
3)、为实例变量赋正确的初始值,有三种技术完成赋值:
  a)、如果对象是clone() 创建的,jvm把原实例变量中的值拷贝到新对象中;
  b)、如果是通过ObjectInputStream类的readObject()调用反序列化的,jvm从输入流中读取的值来初始化实例变量;
  c)、jvm调用对象的实例化方法把对象的实例变量初始化为正确的初始值;

垃圾收集和对象终结
jvm实现必须具有某种自动堆存储管理策略,大部分是使用垃圾收集器。如果类声明了 void finalize()方法,垃圾收集器在释放实例内存前会执行这个方法。

垃圾收集器自动调用的finalize()方法抛出的任何异常都将被忽略。

结束阶段

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

从jvm中卸载类型
很多情况,jvm中类的生命周期和对象的生命周期很相似。jvm如何判断动态装载的类型是否仍然被程序使用,其判断方式和判断对象是否仍然被使用很相似。

如果程序不再引用某类型,那么类型就是不可触及的,就可以被卸载。

使用启动类装载器装载的类型永远都是可触及的,所以永远不会被卸载。只有使用用户定义的类装载器装载的类型才会变成不可触及,才会被卸载。

展开更多 50%)
分享

猜你喜欢

java类型生命周期的详细解析

编程语言 网络编程
java类型生命周期的详细解析

CORBA对象生命周期之生命周期的评估

编程语言 网络编程
CORBA对象生命周期之生命周期的评估

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

java线程之线程的生命周期的使用

编程语言 网络编程
java线程之线程的生命周期的使用

使用Java Annotations来管理对象生命周期

编程语言 网络编程
使用Java Annotations来管理对象生命周期

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

CORBA对象生命周期

Java JAVA基础
CORBA对象生命周期

Android 程序应用的生命周期

编程语言 网络编程
Android 程序应用的生命周期

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Sql Server 字符串聚合函数

Sql Server 字符串聚合函数

高手轻松帮你解决Windows7下飞信无法启动问题

高手轻松帮你解决Windows7下飞信无法启动问题
下拉加载更多内容 ↓