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() 的区别的主要内容,如果未能解决你的问题,请参考以下文章