Java 内存回收机制
当执行构造方法生成一个对象时,需要占用各种系统资源。当生成的对象不再使用时,就需要返回给操作系统,以免资源的泄露。在各种系统资源中,最常使用的就是内存。Java运行时系统通过垃圾收集周期性地释放无用对象所使用的内存。当一个对象在程序中不再使用时,即当前的代码段不属于对象的作用域或把对象的引用赋值为空,则该对象就成了一个无用的对象。Java的垃圾收集器自动扫描对象的动态内存区,对不再使用的对象做上标记以进行垃圾回收。垃圾收集器作为一个线程运行。当系统的内存用尽或程序中调用System.gc()要求进行垃圾收集时,垃圾收集线程与系统同步运行,否则垃圾收集器在系统空闲时异步地执行。C语言中通过free来释放内存,C++中则通过delete来释放内存,如果程序员忘记释放内存,则容易造成内存泄漏甚至导致内存的耗尽。在Java中不会发生内存泄漏情况,但对于其他资源,则有产生泄露的可能性。
Java中的每一个类都有一个finalize()方法用于释放资源,在对对象进行自动垃圾回收前,Java运行时系统会自动调用对象的finalize()方法来释放系统资源,如关闭打开的文件或socket等。该方法的声明格式如下:
protected void finalize() throws throwable
finalize()方法在java.lang.Object中声明,但并没有做任何事情。如果一个类需要释放内存以外的资源,则需要在类中重写finalize()方法。