gpt4 book ai didi

java - 垃圾收集器的疑问

转载 作者:行者123 更新时间:2023-12-02 07:43:34 25 4
gpt4 key购买 nike

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

所以现在我的问题是,GC是一个后台线程,将始终在后台运行。现在我们怎么能说我们不知道 GC 何时运行呢?是不是这样的语句“我们不知道GC什么时候会调用finalize()方法”是这个意思吗?如果这就是他们的意思,那么工作是什么GCGC 的职责是找出未使用的变量并将其从内存中删除。既然如此,为什么GC也不能调用finalize()方法呢?

最佳答案

Now how can we say that we dont know when the GC will run?.

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

what is the job of GC.

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

n that case,why GC cannot call finalize() method also?

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com