Java 垃圾回收机制
来源:互联网 发布:刚性攻丝编程 编辑:程序博客网 时间:2024/06/05 19:53
------- android培训、java培训、期待与您交流! ----------
Java的垃圾回收是Java语言的重要功能之一。当程序创建对象,数组等引用类型实体时,系统都会在堆内存中分配一块内存区,当这块内存不再被任何引用变量引用时,这块内存就编程了垃圾,等待垃圾回收机制进行回收。
垃圾回收机制具有的特征:
1,垃圾回收机制只负责回收堆内存中的对象,不会回收任何物理资源(数据库链接等);
2,程序无法控制垃圾回收的精确运行,垃圾回收会在适当的时候进行,当对象永久性的失去引用后,系统就会在合适的时候收回它所占用的内存。
3,在垃圾回收机制回收任何对象之前,总会先调用它的finalize()方法,使该对象重新复活(让一个引用变量重新指向该对象),从而导致垃圾回收机制取消回收。
当一个对象在堆内存中运行时,根据它被引用变量所引用的状态分为三种情况:
可达状态:当创建一个对象后,有一个或以上的引用变量指向该对象,则这个对象为可达状态;
可恢复状态:当一个对象不再被任何引用变量指向时,该对象为可恢复状态。
不可达状态:当一个对象与所有的引用变量的关联都被切断时,并且系统已经调用了对象的finalize()方法后依然没有让该对象变成可达状态,那么这个对象将永久的失去引用,变成不可达状态。只有处在这个状态的时,系统才会收回该对象所占用的空间。
虽然我们无法控制垃圾回收机制的精确运行。但是我们可以强制系统进行垃圾回收。注意:这里的强制系统进行垃圾回收,只不过是通知系统进行垃圾回收。但系统是否进行垃圾回收依然不确定。
大部分时候强制系统垃圾回收后总会有一些效果。
强制系统垃圾回收的方法有两种:
第一种:System.gc();第二种:Runtime.getRunTime().gc();
例如:
我在运行后:第一次没有任何输出,第二次也没有,第三次输出了finalize()方法中的内容,正好说明了,即使强制让系统进行垃圾回收,但是具体何时回收也是不确定的。
下面的例子是在强制让系统进行垃圾回收时,系统调用finalize()方法后,使该对象重新变成可达状态。
运行结果:
但是要明确即使让主线程暂停三秒也不一定能让系统进行垃圾回收。但暂停后再通知系统进行垃圾回收后,系统进行垃圾回收的可能性会变大。
- java垃圾回收机制
- Java垃圾回收机制
- java垃圾回收机制
- 【java】垃圾回收机制
- [Java] 垃圾回收机制
- Java垃圾回收机制
- Java垃圾回收机制
- Java垃圾回收机制
- java垃圾回收机制
- Java垃圾回收机制
- Java垃圾回收机制
- java垃圾回收机制
- java垃圾回收机制
- java 垃圾回收机制
- java垃圾回收机制
- Java垃圾回收机制
- Java垃圾回收机制
- Java垃圾回收机制
- Eclipse快捷键大全
- 如何向妻子解释设计模式
- Xcode6中Apple LLVM 6.0 Error的解决办法
- 关于Android外设键盘导致系统输入法隐藏的解决方案
- [R语言] 加载和安装R包
- Java 垃圾回收机制
- iOS计数1117************************
- JNDI的一篇文章
- 【热门收藏】iOS开发人员必看的精品资料(100个)——下载目录
- PopupWindow和AlertDialog区别
- begining for my weibo life
- Flex 简单的DataGrid 例子
- marine plywood and brown brown film faced plywood pvxl
- Java中String和String Buffer两种字符串类型之间的区别和联系