Collect from "Think in Java".
Java有垃圾回收器(以下称为GC)来回收不用的对象占据的内存资源。但也有特殊情况:
如果你的对象(并非使用new)获得了一块“特殊”的内存,由于GC只知道释放那些经由Java new分配的内存,所以GC不知道如何释放该对象的这块“特殊”的内存。
为了应对这种情况,Java允许在类中定义一个finalize()方法。它的工作原理“应该”是这样的:
一旦GC准备好释放对象占用的内存空间,将首先调用finalize()方法,并且在下一次GC进行垃圾回收时,才会真正地回收对象所占用的内存。
但需要强调:
这歌finalize()函数并不能看做C++的析构函数,在C++中,如果程序没有错误的话,对象是一定会被销毁的。而在Java中,并非所有对象都会被GC进行“回收”的。换句话说:
1、对象可能不被回收。
2、垃圾回收不等于析构。
这意味着在不需要某个对象之前,如果必须执行某些动作,那么就得需要自己手动来做。Java并未提供“析构函数”类似的概念,要做类似的清除工作,程序员必须手动创建一个执行清除工作的普通方法。
finalize()的用途
看完上面这一段话,相信读者都明白了——不能使用finalize()作为通用的垃圾回收方法。那么finalize()真正的用途是什么呢?
这里引出要记住的第三点:
3、垃圾回收只与内存有关。
其实要理解很简单,Java允许调用C/C++的函数、方法,而C/C++又可以调用其他语言的代码。所以,如果在C/C++编写的代码中,使用了malloc等进行内存的分配,此时GC就不能再释放这些内存了。所以这个时候,finalize()就该登场了。
你必须执行清除
Java不允许创建局部对象,程序员必须使用new,在Java中,也找不到”delete“来释放对象,因为GC会帮助你释放存储空间。但是,GC的存在并不能替代类似C++中的析构函数。如果你希望进行释放存储空间以外的清除工作,还是得明确调用某个恰当的Java方法。
相关推荐
Java垃圾回收机制(GC)是Java编程语言的关键特性,它自动管理内存,释放不再使用的对象,以防止内存泄漏。GC的运作方式主要有两种策略:引用计数和对象引用遍历。 引用计数是一种简单但不完美的方法。每个对象都有...
Java垃圾回收机制详解和调优.doc Java垃圾回收机制详解和调优.doc Java垃圾回收机制详解和调优.doc Java垃圾回收机制详解和调优.doc Java垃圾回收机制详解和调优.doc Java垃圾回收机制详解和调优.doc Java垃圾回收...
Java垃圾回收机制总结 Java垃圾回收机制是Java虚拟机(JVM)中的一种机制,用于防止内存泄露和有效地使用空闲的内存。垃圾回收机制的主要目的是为了回收无用的对象占用的内存空间,使该空间可被程序再次使用。 ...
Java中类的生命周期与java垃圾回收机制
【Java面试题】Java垃圾回收机制
Java垃圾回收机制简介 Java垃圾回收机制是Java语言中的一种自动内存管理机制,它可以帮助程序员更好地编写Java应用程序,而不需要手动编写垃圾回收相关的代码。这篇文章将会介绍Java垃圾回收机制的基本概念和原理,...
Java垃圾回收机制是Java编程中至关重要的一部分,它自动管理内存,释放不再使用的对象,避免内存泄漏,并优化内存使用。Java虚拟机(JVM)的堆内存是存放对象的主要区域,当对象通过new等指令创建后,垃圾回收机制...
浅谈 JAVA 垃圾回收机制 Java 垃圾回收机制是 Java 语言中的一种自动内存管理机制,它可以自动回收内存中的垃圾,避免代码运行时由于忘记释放对象而带来的内存泄漏问题。 Java 中的垃圾回收机制主要通过两种算法来...
Java垃圾回收机制详解 Java垃圾回收机制是Java虚拟机(JVM)中的一种自动管理内存的机制,它可以自动地将不再使用的对象从内存中回收,以释放更多的内存空间供其他对象使用。本文将详细介绍Java垃圾回收机制的工作...
Java垃圾回收机制是Java编程语言的关键特性,负责自动管理程序中的内存,确保程序高效、稳定地运行。在Java虚拟机(JVM)中,垃圾回收的主要任务是识别并清理不再被程序使用的对象,以避免内存泄漏。以下是关于Java...