关于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中引用的引用级别:强引用 > 软引用 > 弱引用 > 虚引用。
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基础类型与引用类型内存存储问题,以及string.intern()方法(String两种创建方式的区别)
- 6、Java类、对象、构造器、引用类型内存基本知识、引用类型值传递
- 在java中String,对象,Integer(包装类型的)关于引用传递还是值传递
- 面向对象_引用类型_内存分析_垃圾回收JAVA028-033
- 关于java内存泄露的总结--引用的类型:强引用,弱引用,软引用
- [java.io]关于List对象的引用是自定义类型写入文件
- 关于统一存储多种子类型对象到定长共享内存的问题
- Java 中对象引用的类型
- Java第五课 Java的常用包,"=="和"equals"的用法,基本数据类型与引用类型,对象的克隆。
- java中四种引用类型(对象的强、软、弱和虚引用)
- Java对象的4种引用类型(转)
- Java学习之数组1(1.数组的声明;2.元素为引用数据类型的数组;3.关于main方法里的String[] args;4.数组排序;5.数3退1 数组算法,(用数组模拟链表);6数组查找之二分法;7数组的拷贝)
- 关于JAVA中String类型内存关系分析c
- 初学者的疑问:关于java引用类型标识符
- 关于java中对象的循环引用问题(java编程思想)
- JVM——java对象生命周期(引用类型 创建对象规则)
- Java 对象的4种引用类型
- Java对象的4种引用类型(转)
- 学习android JNI的那些事儿--------6. 在java中传入引用数据类型(对象)作为参数
- JVM概念中的Java对象的大小,以及三种引用类型的定义与区分