您的位置:首页 > 编程语言 > Java开发

关于Java对象在内存中的状态和对象的引用的类型

2017-04-17 10:29 387 查看
一、关于垃圾回收机制的一些特性:

1、垃圾回收只负责回收内存中的对象,而不会回收任何物理资源。

2、程序无法精确控制垃圾回收动作的具体发生时间,垃圾回收只有在内存不足或程序处于空闲时间才会发生回收动作。

3、垃圾回收在触发回收动作之前,会首先调用finalize方法,finalize可以使一些垃圾对象重新复活,finalize方法结束之后,垃圾回收动作才会发生。

二、对象在内存中分为 可达状态,可恢复状态,不可恢复状态:

1、可达状态:如果一个对象在创建之后,有一个或多个引用指向该对象,那么这个对象就处于可达状态。

2、可恢复状态:程序中,如果一个对象没有任何引用指向它,那么该对象就处于可恢复状态,处于可恢复状态下的对象,垃圾回收器在准备回收垃圾时,调用finalize方法,在finalize方法中,系统有可能重新让一个或多个引用指向该对象,那么这个对象就由可恢复状态变为可达状态。

3、不可恢复状态:垃圾回收器被触发调用finalize方法时,处于内存中的可恢复状态的对象没有重新获取引用,那么该对象就处于不可恢复状态。

三、对象的引用可以分为 强引用,软引用,弱引用,虚引用

1、强引用:可以理解为普通的引用,即我们在创建对象时,指向某个对象的引用。

2、软引用:由 java.lang.reg.SoftReference实现,就使用软引用的对象,当系统中内存足够,程序运行稳定时,垃圾回收器不会考虑回收该对象,而且程序也可以使用该对象,但是,当系统内存不足,垃圾回收器准备回收对象时,回收器可能将该对象进行回收。

3、弱引用:由 java.lang.reg.WeakReference实现。弱引用与软引用差不多,内存空间充足,垃圾回收动作不会触发时,该对象可以被程序使用,但垃圾回收动作触发时,该引用指向的对象就肯被回收。并且弱引用的引用级别比软引用要低,就是说系统存在软引用和弱引用,垃圾回收器将首先回收弱引用指向的对象。

4、虚引用:由 java.lang.reg.phantomReference实现。虚引用比较玄幻,就是虚引用类似于没有。当一个对象有虚引用指向他时,该对象和没有引用差不多。所以虚引用的引用级别最低,而且虚引用不能单独使用,必须与引用队列 ReferenceQueue 联合使用。

5、4中引用的引用级别:强引用 > 软引用 > 弱引用 > 虚引用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 对象 内存
相关文章推荐