我在这里有一些关于Java垃圾收集器的问题。
首先,让我说说我对Java GC.的理解
GC是一个后台线程,它将在JVM启动时始终在后台运行。
每个对象都有一个finalize()方法。此方法用于释放
销毁对象之前的系统资源。根据Java专家的说法,
我们不应将资源放在finalize()方法下以释放
系统资源。因为我们无法确定GC何时运行。但是我们可以
通过调用GC请求System.GC()运行。

所以现在我的问题是,GC是一个后台线程将始终在后台运行。
现在我们如何说我们不知道GC何时运行?是这样的语句吗?
那是这个意思吗?如果那是他们的意思,那是什么工作
"we dont know when the GC will call finalize() method "GC负责找出未使用的变量并从内存中删除。
在这种情况下,为什么GC也不能调用finalize()方法?

最佳答案

现在我们如何说不知道GC何时运行?


GC的功能由复杂的Algos处理,这取决于底层操作系统和硬件。我们之所以不能这样说是因为,如果有人告诉某个特定的JVM版本,那么它将对其他JVM无效。因此,最好不要依赖于此。


  GC的工作是什么。


GC查找较少引用的对象(读取更多引用类型的对象)并回收它们使用的内存。


  在那种情况下,为什么GC也不能调用finalize()方法?


因此,可以确定将调用finalize方法,但不能确定何时调用。因为即使您知道在JVM中何时运行finalize()方法,您也不知道何时在其他JVM中运行。因此,如果您在finalize方法中处理一些非常昂贵的资源,则您的程序可能会在其他JVM中崩溃。

关于java - 垃圾收集器的疑问,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11239051/

10-12 00:34