Java中对象的三种状态
转载自 Java中对象的三种状态
Java中的对象的三种状态是和垃圾回收紧密相关的,因此有必要深究。
状态一:可触及态:从根节点开始,可以搜索到这个对象,也就是可以访问到这个对象,也有人将其称为可达状态。
状态二:可复活态:从根节点开始,无论如何都不能访问到这个对象,也就是说这个对象的所有引用都被释放,没有任何变量引用该对象了,
但是该对象有可能在finalize()方法中再次被引用,从而复活。
状态三:不可触及态:对象的所有引用都被释放了,并且在对象的finalize()方法中没有复活,这样的话该对象就是不可触及状态。
对于状态三我再解释下,所有对象都有finalize()方法,并且该方法只会被执行一次,并且它的执行时间是随机的,一般在我们为变量赋值为null后,
会执行,如果我们在某个对象的finalize()方法中为他增加了引用,那么该对象会复活,但是当我们再次为其赋值为null时,finalize()方法不会被执行了,
因为该方法知执行一次,该对象也就变成了不可触及态。
说到finalize()方法,我再多说点,有的书上写,可以在finalize()方法中释放某些资源,其实这并不被我们所推荐,主要有两点:
1、finalize()方法执行的时间不确定,那么这就会导致资源还没来得及释放,又有一个线程需要访问资源,可能会产生异常错误。尤其是在多线程程序中。
2、finalize()方法中可能会发生引用外泄,无意中复活对象,从而产能生内存泄漏。
推荐在try-catch-finally结构的finally块中释放资源。
Java中对象的三种状态相关推荐
- java三态_Java中对象的三种状态
Java中的对象的三种状态是和垃圾回收紧密相关的,因此有必要深究. 状态一:可触及态:从根节点开始,可以搜索到这个对象,也就是可以访问到这个对象,也有人将其称为可达状态. 状态二:可复活态:从根节点开 ...
- hibernate中对象的三种状态瞬时态,持久态,游离态区分
1.瞬时态. hibernate中什么时候的对象为瞬时态呢,当我们new 一个对象时,还没有save时,它就是瞬时态的,当我们delete一个对象时,它也是瞬时态了,因为此时,他们在数据库中没有对应 ...
- 菜鸟学SSH(八)——Hibernate对象的三种状态
前面写了几篇关于SSH的博客,但不是Struts就是Spring,Hibernate还从来没写过呢.说好是SSH的,怎么可以光写那两个,而不写Hibernate呢对吧.今天就先说说Hibernate对 ...
- Hibernate 对象的三种状态
Hibernate 对象的三种状态 瞬时(transient): 由new操作符创建,且尚未与Hibernate Session关联的对象被认定为瞬时(Transient)的.瞬时(Transient ...
- Hibernate对象的三种状态(瞬时态,持久态,游离态)
1. 瞬时状态 (瞬态) 当我们通过Java的新的关键字来生成一个实体对象时,这时这个实体对象就处于自由状态,如下: 客户客户=新客户("zx",27,图片); 这时客户对象就 ...
- 【Hibernate框架开发之五】Hibernate对象的三种状态Session常用方法
1. Hibernate对象的三种状态:(图解如下:) 如图所示,Hibernate对象有三种状态,1.Transient 2.Persistent 3.Detached; 三种状态的区别如下: 1 ...
- Class java用法,java中Class的三种实例化
1.调用Object类中的getClass()方法:import java.util.Date; public class ReflectTest3 { public static void main ...
- Hibernate持久化对象的三种状态深入理解
关于OID hibernate缓存是一个map,他会根据OID作为缓存对象的key,我们的映射文件中<id>标签指定的属性值会作为OID 持久化对象的三种状态 为了方便理解,Hiberna ...
- Java中final的三种用法
在java中final的三种用法: 1. final成员变量 2. final函数 3. final类 final成员变量 当你在类中定义变量时,在其前面加上final关键字,那便是说这个变量一旦被初 ...
最新文章
- 机器学习开发者的现代化路径:不需要从统计学微积分开始
- 电子网络发票应用系统网络不通_深度强化学习在典型网络系统中的应用综述
- python生成表格文件_python读取和生成excel文件
- BZOJ1798: [Ahoi2009]Seq 维护序列seq
- python实现栈,实现push(),pop(),top(),getMin()方法
- UIImageView01
- 不顾父母哀求,北大数学天才毕业后坚持出家:理想现实间的挣扎
- c++调用python接口作用是_利用Boost::Python实现C++调用python接口
- 正在东京、首尔开DevDays
- Python模拟分析演员之间亲密程度
- 第一次大作业总结——四则运算程序
- SetupFactory 许可协议设置
- EndNote X7如何在论文中嵌入中文定格式要求的参考文献
- 小米浏览器禁用java_小米手机调试总出现“INSTALL_CANCELED_BY_USER”
- Ubuntu 网易云音乐 Linux 官方版本下载安装
- 基于C语言和LPC1114开发板的嵌入式实验 SysTick实验、定时器实验、LED呼吸灯实验、蜂鸣器实验
- 【Python数据分析——使用matplotlib制作南丁格尔玫瑰图】
- wcdma码片速率_WCDMA中3.84M码片速率的由来
- 微信QQ等主流应用上线国产系统UOS:界面曝光
- 网络统考计算机应用基础ppt视频,计算机应用基础课程网络统考辅导.ppt
热门文章
- C++ 学习之旅(7)——指针pointer
- [SpringSecurity]基本原理_过滤器加载过程
- Factory Method(工厂方法)--对象创建型模式
- 补丁 检测系统_大云制造 | BCLinux For ARM64 V7.6操作系统正式发布
- kettle数据库操作OPTION SQL_SELECT_LIMIT=DEFAULT问题解决
- P4196 [CQOI2006]凸多边形 /【模板】半平面交
- cf1556B B. Take Your Places!
- P2567 [SCOI2010]幸运数字
- 51nod-有限背包计数问题【dp】
- jzoj3798-[NOIP2014模拟8.22]临洮巨人【前缀和】