Java 类的生命周期

来源:互联网 发布:mac air使用教程视频 编辑:程序博客网 时间:2024/06/05 19:04

类生命周期概况

JVM为java程序提供运行时环境(runtime environment),管理类和对象的生命周期时JVM的重要工作之一。
类的生命周期从类被加载、连接和初始化开始到类被卸载结束。
只有当类在生命周期中时,才能被使用,比如调用类的静态方法或者创建类的实例。


类的加载、连接和初始化

类的生命周期从加载、连接和初始化开始。并且严格按照如下步骤进行:

1 加载:查找,并加载类的二进制数据

2 连接

1 验证:确保类被正确加载
2 准备:为类的静态变量分配内存,并且初始化默认值
3 解析:把类中的符号引用转化为直接引用

这里写图片描述


加载

类加载的过程如下:

1 将类对应.class 文件中的二进制数据读到内存中,把它存放到运行时数据区的方法区内;

2 在堆区创建一个Class实例,此实例

a 描述了方法区内的数据结构
b 提供了访问类在方法区内数据结构的接口,如下图所示:

这里写图片描述

可以简单的理解为:类加载的产品是一个Class类的实例。


连接

连接指的是
将已经读入内存的二进制数据合并到虚拟机的运行时环境中去。
包括验证、准备、解析三个步骤。

验证

被加载的.class文件并不一定是Java编辑器生成的(如何黑客可以制作自定义结构的.class文件),
所以JVM 才需要对.class文件进行验证,保证被加载的类有正确的内部结构,
并且与其他类协调一致。
如果JVM 检查到错误,那么抛出Error对象。以此来提高程序的健壮性。

准备

准备阶段为类的静态变量分配内存并且赋予 默认值。

解析

解析阶段,JVM 把类的二进制数据中的符号引用替换为直接引用。
比如,dog.run(); 这行代码,
run() 这个方法是被dog 这个符号(变量名)引用,
解析过程将dog 这个符号替换为一个指针地址(直接引用)。


初始化

执行指的是
静态变量生命和静态代码块。


卸载

当类被加载、连接、初始化后,生命周期就开始了,Java程序可以正常使用该类(实例化,调用方法等),
当描述此类的Class对象不可触及(触不可及为对象生命周期中的概念),
Class对象将结束生命周期,
此类方法区内的数据将被卸载,
此类的生命周期结束。


来源:
http://www.yanwushu.com/post/54.html


end

原创粉丝点击