system.gc() 和 runtime.gc() 的区别

Posted

技术标签:

【中文标题】system.gc() 和 runtime.gc() 的区别【英文标题】:Difference between system.gc() and runtime.gc() 【发布时间】:2011-06-01 06:49:03 【问题描述】:

System.gc()Runtime.gc() 有什么区别?

【问题讨论】:

你应该先学会看javadocs。如果 android javadocs 没有回答您的问题,请访问 Sun / Oracle javadocs。 (是的,我知道代码不同,但作为一般规则,行为是相同的......) 【参考方案1】:

两者都是一样的。 System.gc() 等效于 Runtime.gc()System.gc()内部调用Runtime.gc()

唯一的区别是System.gc() 是一个类方法,而Runtime.gc() 是一个实例方法。所以,System.gc() 更方便。

【讨论】:

但是创建两个具有相同功能的相同方法的目的是什么 Runtime.gc() 不能直接调用。 gc() 是一个实例方法,要正确调用垃圾收集器,您需要调用静态方法getRuntime() 才能最终调用gc() 方法。因此,您需要这样做:Runtime.getRuntime().gc().【参考方案2】:

从源码看:System.gc()实现为

Runtime.getRuntime().gc();

所以这只是一种方便的方法。

【讨论】:

不再正确,至少在 API 23 中是这样。如果您调用 System.gc(),有一个标志可能会阻止 Runtimg.getRuntime().gc() 运行【参考方案3】:

See the docs

System.gc() 等价于Runtime.getRuntime().gc()

【讨论】:

请链接到文档的更新版本。 1.4.2 真的很老了。 抱歉,我只是在使用 Google 给我的第一件事。这确实对 OP 产生了不好的影响——这是 Google 可以回答的问题。 感谢您修复它。我会说它在谷歌上反映得很糟糕。为什么过时的文档是热门搜索结果? Google 不能将新文档的排名高于旧文档吗? AFAIK Google 主要根据点击量对页面进行排名,而较旧的文档的排名会更高,因为它们存在的时间更长。另外:当我搜索“java lang System”时,它确实排名最新,第一个来自搜索“System.gc()”。所以它有时会这样做。 多年来,我一直在 Google 搜索结果中看到 Java API 的这一点。您可以根据需要合理化行为。期望的行为是在列表顶部显示当前文档。首先显示旧文档已损坏,如果 Google 已经修复它会很好。已经好几年了。【参考方案4】:

Runtime.gc() 是本机方法,而 System.gc() 是非本机方法,而后者又调用 Runtime.gc()

【讨论】:

【参考方案5】:

System.gc():

1:是类方法(静态方法)。

2:非本机方法。(不直接与硬件和系统资源交互的代码)。

3:System.gc(),内部调用Runtime.getRuntime().gc()。

Runtime.gc():

1:实例方法。

2:本地方法(一种直接与硬件和系统资源交互的编程语言。)。

【讨论】:

【参考方案6】:

在运行时系统中 gc 是实例方法,但在系统方法中 gc 是静态的。

由于这个原因,我们更喜欢使用 system.gc()。

【讨论】:

不回答问题。【参考方案7】:

两者相同 System.gc() 等效于 Runtime.gc()

System.gc() 内部调用 Runtime.gc()

唯一的区别是:

System.gc() 是一个类(静态)方法,而 Runtime.gc() 是一个实例方法。所以,System.gc()更方便。

System.gc()

public final class System extends Object

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


Runtime.gc()

public class Runtime extends Object

    public void gc()

        // ...

    
    .
    .
    .


【讨论】:

以上是关于system.gc() 和 runtime.gc() 的区别的主要内容,如果未能解决你的问题,请参考以下文章

System.gc() 和 Runtime.gc(). finalize() 方法

System.gc()与Runtime.gc()的区别

JAVA中级面试题

面试题-Java基础-垃圾回收

有关Java垃圾回收的几个问题

java: system.gc()和垃圾回收机制finalize