当前位置: 首页 > 面试题库 >

显式调用System.gc()?

徐凌
2023-03-14
问题内容

据说我们不能 garbage collection 在Java中强制执行该过程。
毕竟是守护线程。

但是仍然有时,为什么我们System.gc( );显式调用该函数?
值得打电话吗?有专业人士吗?
如果在许多情况下没有用,为什么Java不推荐使用此方法?

PS:举例说明会很有用


问题答案:

我认为,认为该System.gc()方法的最佳方法是作为垃圾回收应运行的虚拟机的“提示”。就是说,就像人们认为自己正在执行的“优化”中有很大一部分一样,通常最好是让系统自行处理。系统在不断发展,等等,等等。在某些情况下,开发人员实际上可能会更好地知道它的用例,这与为什么某些代码仍以汇编语言编写的原因非常相似(大多数情况下,编译器会更好)。
,但在少数情况下-或只有少数开发人员-人们实际上可以编写更有效的代码)。

我过去看到的一个证明其存在合理性的示例是,如果分配了大量对象,并且您作为开发人员就知道它们将不再被使用的那一刻。在这种情况下,您可能比GC拥有更多的内存利用率信息(或者至少在它意识到之前),并且由于回收的内存量非常大,因此建议运行它是有意义的。



 类似资料:
  • 问题内容: 想要有关对象的某些调试信息时,我曾经使用toString的隐式调用,因为在对象为null的情况下,它不会引发Exception。 例如: 代替: 除了null以外,还有什么区别吗? 如果前者不起作用,后者可以工作吗? 编辑: 在隐式调用的情况下,到底做了什么? 问题答案: 没有什么区别。使用较短且经常使用的那一种。 如果您实际上由于其他原因想要获取对象的字符串值,并且希望它为null友

  • 问题内容: Java 8引入了默认方法,以提供扩展接口的功能,而无需修改现有的实现。 我想知道当由于不同接口中的默认实现冲突而导致该方法的默认实现被重写或不可用时,是否可以显式调用该方法的默认实现。 考虑上面的代码,你将如何A.foo()从B类的方法调用? 问题答案: 按照这篇文章,你在界面访问默认方法A使用 这可用于如下(假设接口A和C两个有默认的方法foo()) 并且可以同时具有方法,可以选择

  • 我的问题是:为什么调用不更快或更好,从而更可取?

  • 问题内容: 为什么Eclipse总是在构造函数上给我错误: 错误是: 类 密集板 类 板 问题答案: 您只需执行此操作即可将值发送到父类。

  • 问题内容: 我已阻止,然后通过以下代码等待信号: 由于处理程序设置为(定义为),最后一行生成分段错误。如果将默认处理程序设置为或,该如何手动调用它?另请注意,该定义为。 问题答案: 当你发现你不能调用SIG_DFL和SIG_IGN 本身 。但是,您可以或多或少模仿它们的行为。 简而言之,模仿正常信号处理将是: 用户定义的s 很容易 对于SIG_IGN来说足够简单,需要注意的是,对于CHLD,您需要