System.gc()和System.runFinalization()功能一模一样吗???

孤尽JavaSea 2009-08-28 09:49:57
好象在CSDN上,有人说这两者功能一模一样的,既然一样,,在同一个类里,何必定义两个方法。
...全文
340 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
humanity 2009-08-29
  • 打赏
  • 举报
回复
如果你想立即 GC,
要按顺序调用2个方法:
gc();
runFinalize(); 它会立即清理内存,不过不知道不同的 JVM 是不是有不同。

我在 Eclipse 插件中用过,确实立即执行。只写一个 gc() 它总是置若罔闻。
meiwenhui 2009-08-29
  • 打赏
  • 举报
回复
只知gc(),还没用过runFinalization()。学习了
lcj_up 2009-08-29
  • 打赏
  • 举报
回复
没用过。。。学习学习。。。
zhangyong20081204 2009-08-29
  • 打赏
  • 举报
回复
我的认识是,runFinalization()是只是执行还没有完成的finalize 方法,还是尽量的。
finalize 方法是所有类继承了Ojbect的。所以应该比gc()还要上层的关系,
孤尽JavaSea 2009-08-29
  • 打赏
  • 举报
回复
感觉还不是很清晰。。
yaoguicheng 2009-08-28
  • 打赏
  • 举报
回复
是否可以这样理解?

前者是把占了内存但是没有利用,同时没有被垃圾回收机制处理的对象尽可能的处理掉。

后者是强制垃圾回收机制尽可能的回收没有被利用的对象,以释放出其占用的内存。
knightzhuwei 2009-08-28
  • 打赏
  • 举报
回复
runFinalization
public static void runFinalization()

运行处于挂起终止状态的所有对象的终止方法。
调用该方法说明 Java 虚拟机做了一些努力运行已被丢弃对象的 finalize 方法,但是这些对象的 finalize 方法至今尚未运行。当控制权从方法调用中返回时,Java 虚拟机已经尽最大努力去完成所有未执行的终止方法。

调用 System.runFinalization() 实际上等效于调用:

Runtime.getRuntime().runFinalization()

gc
public static void gc()

运行垃圾回收器。
调用 gc 方法暗示着 Java 虚拟机做了一些努力来回收未用对象,以便能够快速地重用这些对象当前占用的内存。当控制权从方法调用中返回时,虚拟机已经尽最大努力从所有丢弃的对象中回收了空间。

调用 System.gc() 实际上等效于调用:

Runtime.getRuntime().gc()


这两个真的一样么?

62,610

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧