Java的垃圾回收机制
2013-03-16 16:10
204 查看
今天复习了下《Thinking in Java》有关终结处理和垃圾回收的知识,这方面的知识没怎么用过,理解不是很透彻,拿出来小小的整理一下~
在C、C++中,要销毁对象总需要去用到析构函数(无论是自动调用还是delete去销毁new创建的对象),如果忘了delete那就悲剧了~。而java中所有的对象必须要通过new来获得,并且由垃圾回收机制来销毁,这也是java由于c++的地方之一。然而垃圾回收并不能完全代替析构函数的作用,我自己将java中的垃圾处理分成两块来看:一是清理java中new创建的对象,二是对象(并非使用new)获得“特殊”内存。《Thinking
in Java》中提到了三句话:
1. 对象可能不被垃圾回收;
2. 垃圾回收并不等于“析构”;
3. 垃圾回收只与内存有关;
在具体分析之前需要了解java中是如何存储对象实例的——堆存储(C、C++是放在堆栈里的),没分配一个新对象,它就往前移动一格,而垃圾回收装置就是一面回收空间,一面使堆中的对象紧凑的排列,让堆就像一个运行良好的传送带一样。
PS:
java中主要存在4块内存空间:
栈内存空间:保存所有的对象名称(更准确地说是保存了引用的堆内存空间的地址)
堆内存空间:保存每个对象的具体属性内容。
全局数据区:保存static类型的属性。
全局代码区:保存所有的方法定义。
再来看垃圾回收,Java中的垃圾回收实际上被视为低优先权的后台进程,在运行中并不是说一个对象不用了,over了,就立即调用垃圾回收(这显然会降低编译运行的速度)。现实的情况是,Java虚拟机采用自适应的垃圾回收技术,并在“停止—复制”和“标记—清扫”之间来回倒腾(两者都需要暂停程序才能执行,后者在只会产生少量垃圾的情况下执行,前者在碎片较多时执行)。
对于特殊的情况,比如书中提到的“本地方法”,需要用到finalize(),然而这个东西常常隐藏着未知的危险(反正我是不知道啦~),finalize()作为终结函数可以在程序结束时(你可以通过System.gc()来让它在内存没有堆满的时候运行),可以用来做一些有趣的事情。。。
只言片语,小小总结下~
在C、C++中,要销毁对象总需要去用到析构函数(无论是自动调用还是delete去销毁new创建的对象),如果忘了delete那就悲剧了~。而java中所有的对象必须要通过new来获得,并且由垃圾回收机制来销毁,这也是java由于c++的地方之一。然而垃圾回收并不能完全代替析构函数的作用,我自己将java中的垃圾处理分成两块来看:一是清理java中new创建的对象,二是对象(并非使用new)获得“特殊”内存。《Thinking
in Java》中提到了三句话:
1. 对象可能不被垃圾回收;
2. 垃圾回收并不等于“析构”;
3. 垃圾回收只与内存有关;
在具体分析之前需要了解java中是如何存储对象实例的——堆存储(C、C++是放在堆栈里的),没分配一个新对象,它就往前移动一格,而垃圾回收装置就是一面回收空间,一面使堆中的对象紧凑的排列,让堆就像一个运行良好的传送带一样。
PS:
java中主要存在4块内存空间:
栈内存空间:保存所有的对象名称(更准确地说是保存了引用的堆内存空间的地址)
堆内存空间:保存每个对象的具体属性内容。
全局数据区:保存static类型的属性。
全局代码区:保存所有的方法定义。
再来看垃圾回收,Java中的垃圾回收实际上被视为低优先权的后台进程,在运行中并不是说一个对象不用了,over了,就立即调用垃圾回收(这显然会降低编译运行的速度)。现实的情况是,Java虚拟机采用自适应的垃圾回收技术,并在“停止—复制”和“标记—清扫”之间来回倒腾(两者都需要暂停程序才能执行,后者在只会产生少量垃圾的情况下执行,前者在碎片较多时执行)。
对于特殊的情况,比如书中提到的“本地方法”,需要用到finalize(),然而这个东西常常隐藏着未知的危险(反正我是不知道啦~),finalize()作为终结函数可以在程序结束时(你可以通过System.gc()来让它在内存没有堆满的时候运行),可以用来做一些有趣的事情。。。
只言片语,小小总结下~
相关文章推荐
- Java垃圾回收机制
- Java垃圾回收机制
- Java中垃圾回收机制
- java两种核心机制之一--java垃圾回收机制
- 成为Java GC专家(3):如何优化Java垃圾回收机制
- Java与C#的垃圾回收机制
- JVM原理(Java代码编译和执行的整个过程+JVM内存管理及垃圾回收机制)
- 深入浅出Java垃圾回收机制(GC)
- Java的垃圾回收机制
- Java性能优化系列之四--Java内存管理与垃圾回收机制详解
- java 垃圾回收机制浅析
- java垃圾回收机制
- Java的垃圾回收机制GC
- 深入理解 Java 垃圾回收机制
- JAVA垃圾回收机制
- Java垃圾回收机制浅析
- java垃圾回收机制
- JAVA 内存管理总结:内存泄露、数据存储、垃圾回收机制一网打尽!
- Java的垃圾回收机制
- 全面分析Java的垃圾回收机制