我所认识的垃圾回收
来源:互联网 发布:显示器亮点测试软件 编辑:程序博客网 时间:2024/05/14 07:12
finalize方法认识
当GC扫描到有对象没有任何引用指向它时 就会调用该对象的finalize方法,等到下次再次扫描到的时候就会真正回收对象,释放所占内存,所以如果需要在垃圾回收时做一些清理保存工作,可以在对象的finalize方法中处理。
并且之所以要有finalize方法,是由于在分配内存是采用了类似C语言的做法,而非java中的通常做法。这种情况多发生在使用“本地方法”的情况下,本地方法是一种java调用非java代码的方式,本地方法只支持c和c++。在费java代码中,也许会调用c的malloc()函数来分配存储空间,而且除非使用了free()函数,否则存储空间将得不到释放,从而造成内存泄漏。当然,free()是c和c++的函数,所以需要在finalize()中用本地方法调用它。
垃圾回收发生的原因是为了回收程序不再使用的内存
GC回收有多重回收策略,(停止-复制 标记-清扫)使用哪一种策略取决于java虚拟机 如果所有对象都很稳定,垃圾回收器的效率降低的话,就切换到“标记-清扫”方式,同样,java虚拟机会跟踪“标记-清扫”效果,如果发现堆内存中出现很多零碎空间,则切换到“停止-复制”方式。这就叫“自适应”技术,所以GC回收可以理解为“自适应的,分代的,停止-复制的,标记-清扫”式GC。
停止-复制是另外复制一块相同的堆内存,将有用的对象移到新的堆空间中,将剩下的无用的内存回收,适用于回收很多零碎内存,并且新堆空间的内存是连续的,这种方式缺点是得维护两块内存,效率降低,常发生在这些大内存空间中。
标记-清扫 是堆指针遍历所有堆内存对象,每当找到一个存活的对象,就给对象设计一个标记,当全部标记工作完成的时候,清理工作才会开始,没有标记的对象将被释放,所以剩下的堆内存是不连续的,如需连续,还需整理。
- 我所认识的垃圾回收
- 我所理解的java垃圾回收的自适应技术
- PHP 的垃圾回收机制一些认识
- 关于垃圾回收的几个错误认识
- JVM的垃圾回收简单认识
- 我所认识的C++
- 我所认识的名人
- 我所认识的人性
- 我所认识的EXT2
- 我所认识的ACPI
- 我所认识的世界
- 我所认识的PHP
- 我所认识的CAFFE
- .net垃圾回收和CLR 4.0对垃圾回收所做的改进之一
- .net垃圾回收和CLR 4.0对垃圾回收所做的改进之二
- .net垃圾回收和CLR 4.0对垃圾回收所做的改进之三
- .net垃圾回收和CLR 4.0对垃圾回收所做的改进之三
- .net垃圾回收和CLR 4.0对垃圾回收所做的改进之二
- 杭电ACM 1012 u Calculate e java
- problem1075 what are you talking about?
- 调试JDK源码-一步一步看HashMap怎么Hash和扩容
- 使用Dexposed为你的安卓应用加上在线修复的能力。
- Cholesky分解法
- 我所认识的垃圾回收
- android图像处理之Bitmap
- J2EE的13个规范总结
- 【bzoj2115】[Wc2011] Xor 高斯消元+dfs
- IOS持续集成-之-地址集合
- 杭电ACM1106排序Java代码
- poj-2406-Power Strings
- bootstrap常用功能快速入门以及常见问题解决方案
- 查找一个字符串出现最多,并计算其次数