由于Java编程有一个构造函数,它在新对象实例化时运行代码,所以我很好奇是否有什么东西可以解决这个问题。创建新对象占用内存,那么Java中是否有一种机制可以擦除或覆盖未使用的内存?在java中有一个析构函数来对付构造函数吗?
如果Java中存在析构函数,那么它在编程语言(如C)中与其他内存管理系统有何区别?
由于Java编程有一个构造函数,它在新对象实例化时运行代码,所以我很好奇是否有什么东西可以解决这个问题。创建新对象占用内存,那么Java中是否有一种机制可以擦除或覆盖未使用的内存?在java中有一个析构函数来对付构造函数吗?
如果Java中存在析构函数,那么它在编程语言(如C)中与其他内存管理系统有何区别?
您可以覆盖java.lang.Object
定义的finalize
方法也不能保证您finalize
方法是在你的程序运行曾经把!看看JavaDoc!因此在大多数情况下,重写'finalize'并不是一个好主意。
,如果你需要清理的资源,你可以使用一个“尝试/终于”语句,或者如果你使用一些框架像“春秋”由框架在java中提供(例如@PreDestroy
)
顺便说一句:一些挂钩你不能主动擦除或覆盖内存区域,这是由垃圾收集器完成的。
在java中用于擦除存储器,其与具有不任何引用(其称为垃圾)中的代码有一个称为垃圾callector机构对象使用。 JVM在需要时调用它,但您可以通过System.gc()
调用它。
至于构造计数器(这是一些代码,执行当对象实例化)存在最终确定其执行时,其目的在于垃圾收集方法。
您可以覆盖它(它在Object
类中定义)。
都能跟得上。但也有一些是被称为'垃圾Collector'这需要的是照顾自动... – Codebender
有“敲定”,但它实际上不是一个析构函数。这里是一篇关于Java清理的文章:http://www.javaworld.com/article/2076697/core-java/object-finalization-and-cleanup.html – Fildor
你可以使用java.lang.ref.Reference来以某种方式操纵对象可能会被GCed。 –