【问题标题】:Is Runtime.getRuntime().gc() of any use or makes any difference as its continued in Java 8?Runtime.getRuntime().gc() 在 Java 8 中是否有任何用途或有什么不同?
【发布时间】:2015-09-07 13:21:54
【问题描述】:

System类和Runtime类都有gc()方法,System类的gc()方法调用Runtime的方法。

public static void gc() {
        Runtime.getRuntime().gc();
    }

根据运行时类中 gc() 的 Java 代码文档

调用此方法表明 Java 虚拟机花费精力回收未使用的对象,以使它们当前占用的内存可用于快速重用。当控制从方法调用返回时,虚拟机已尽最大努力回收所有丢弃的对象。

Runtime.getRuntime().gc() 被调用时有什么特别的事情发生吗? 如果我调用它而不调用它会发生什么?

我已经知道了什么?

调用 gc() 时不要立即调用垃圾收集器,当垃圾收集应该发生时它由 jvm 决定。

编辑

我想了解为什么gc() 在 Java8 中仍然存在。其他线程上的讨论没有被接受的答案并且很老。

【问题讨论】:

  • "从不使用 gc()" (c)
  • 我已经编辑了我的问题。 @Suvitruf Thnx 寻求建议。你能告诉我如果我使用它会有什么不同吗?
  • 它们是完全不同的问题,不重复,帖子通常要求 gc(),这篇帖子询问 java8 中的变化。
  • 好吧,那么认为 java8 发生了变化的原因是什么?
  • 我说的不是没有用例的方法,而是不会使用的方法。像 JRE 这样大的库有很多特殊用途的方法,很多开发人员找不到它们的用例。这并不意味着根本没有用例。不过,我猜你不会用,例如Runtime.halt(int)

标签: java garbage-collection java-8


【解决方案1】:

也许您正在编写 a benchmarking library,在运行基准测试时尽量减少来自 GC 的干扰对您来说很重要。

所以你可能想要to call gc() between runs(因为你正在编写低级的东西并且你知道在实践中你的目标JRE实际上会在调用gc()时运行GC)......

【讨论】:

【解决方案2】:

有几个与此主题相关的答案以及互联网上的大量讨论。这里有几个链接可以帮助未来的读者更好地掌握它。

  1. 阅读 oracle 在常见问题解答中对 System.gc() 的看法。
  2. bug 已被记录,但关于 System.gc() 的误导性文档仍未解决。
  3. https://community.oracle.com/thread/1542855

【讨论】:

    猜你喜欢
    • 2010-10-21
    • 2017-05-14
    • 2014-04-22
    • 2012-05-31
    • 2015-06-05
    • 1970-01-01
    • 1970-01-01
    • 2015-05-11
    • 2021-04-23
    相关资源
    最近更新 更多