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
- java类的生命周期
- java类的生命周期
- Java类的生命周期
- java类的生命周期
- java类的生命周期
- java类的生命周期
- java类的生命周期
- java 类的生命周期
- java类的生命周期
- Java类的生命周期
- Java类的生命周期
- JAVA类的生命周期
- Java类的生命周期
- Java类的生命周期
- Java 类的生命周期
- java类的生命周期
- Java类的生命周期
- Java类的生命周期
- centos7.2 postgresql 9.2 用户名登录 ‘psql: 致命错误: 用户 "postgres" Ident 认证失败’
- 两点间最短路径—Dijkstra算法和Floyd算法
- MySQL统计信息
- Spring核心原理AOP
- windows部署项目到服务器,文件名中文乱码
- Java 类的生命周期
- mybatis入门实战之CRUD
- python爬取糗事百科
- #支持向量机(SVM)与其理论发展(1)
- MySQL 5.7 EXPLAIN EXTENDED语句说明
- 次小生成树
- debug有感
- Python网络爬虫1
- vue.js 2.0实现的简单分页