概述
众所周知,C++要手动释放内存。而Java的垃圾回收机制避免了这一点,JVM中有一个叫作垃圾回收器的东西,可以帮助程序员管理内存。垃圾回收机制虽然方便了编程,但是牺牲了性能。
垃圾回收机制原理
JVM中有一个叫作垃圾回收器的东西(实际上也许这个东西并不存在),垃圾回收器的作用是查找和回收无用的对象,以便让JVM更好的使用内存。
当一个对象没有任何对象指向它的时候,这个对象就是无用的,于是它就成为了垃圾回收器的回收对象。但是有一点必须注意,当一个对象变得无用的时候,它并不会立马被垃圾回收器回收,至于什么时候被回收,这要取决于JVM。JVM的垃圾回收过于频繁的话,会导致性能下降,过于稀疏的话,会导致内存吃紧,但是JVM会控制好垃圾回收的时间。
程序员可以通过System.gc()来强制垃圾回收,但是这个命令下达后无法保证垃圾回收器立即工作,但经验表明,下达命令后,会在短期内执行你的请求
finalize()方法
当一个对象被垃圾回收器回收之前,这个对象的finalize()方法将会被调用(finalize()在Object中被定义,所以每个对象都拥有),finalize()方法负责在对象被清除之前做必要的清理工作。
正常情况下,当某个对象被系统收集为无用信息的时候,finalize()将被自动调用,但是jvm不保证finalize()一定被调用,也就是说,finalize()的调用是不确定的,这也就是为什么sun不提倡使用finalize()的原因