垃圾回收

孤独剑客 2008-11-04 03:00:08
朋友们 我学习java的时间还不长,能不能告诉我垃圾回收是怎么样具体实施的啊
谢谢大家啊
package ThinkingInJava;

class Chair
{
static boolean gcrun=false;
static boolean f=false;
static int created=0;
static int finalized=0;
int i;
Chair()
{
i=++created;
if(created==47)
{
System.out.println("Created 47");
}
}
protected void finalize()
{
if(!gcrun)
{
gcrun=true;
System.out.println("Begining to finalize after"+created+"Chair have been created");
}
if(i==47)
{
System.out.println("Finalizing Chair #47,"+"Setting flag to stop Chair creation");
f=true;
}
finalized++;
if(finalized>=created)
{
System.out.println("All"+finalized+"finalized");
}
}

}
public class Garbage {
public static void main(String[] args)
{
if(args.length==0)
{
System.err.println("Usage:\n"+"java Garbage after");
return;
}
while(!Chair.f)
{
new Chair();
new String("To take up space");
}
System.out.println("After all Chairs have been created:\n"+"total created+"+Chair.created+", total finalized="+Chair.finalized);
if(args[0].equals("before"))
{
System.out.println("gc():");
System.gc();
System.out.println("runFinalization():");
System.runFinalization();
}
System.out.println("bye!");
if(args[0].equals("after"))
{
System.runFinalizersOnExit(true);
}
}


}
...全文
138 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
villagehead 2008-11-04
  • 打赏
  • 举报
回复
帮推

建议楼主下次再提问要问一些更具体的问题,
比如某段程序中,某某对象在什么时候回收之类的,
像这个问题,个人感觉太宽泛了。
需要解释的很多,不好着力。

good luck
ZangXT 2008-11-04
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 scarlet365 的回复:]
java本来就是和现实贴近的.
垃圾回收机制一样.
就上生活中.你有垃圾只需放在垃圾站.清洁工会自己去处理那些垃圾.你不能也不必知道清洁工什么时候会来处理垃圾.
调用system.gc就好比.打电话给环卫局.催促他们来处理垃圾.但他们什么时候来就不一定了.也许马上.也许一年.谁知道呢..
[/Quote]
很生动,呵呵.
scarlet365 2008-11-04
  • 打赏
  • 举报
回复
java本来就是和现实贴近的.
垃圾回收机制一样.
就上生活中.你有垃圾只需放在垃圾站.清洁工会自己去处理那些垃圾.你不能也不必知道清洁工什么时候会来处理垃圾.
调用system.gc就好比.打电话给环卫局.催促他们来处理垃圾.但他们什么时候来就不一定了.也许马上.也许一年.谁知道呢..
KingZChina 2008-11-04
  • 打赏
  • 举报
回复
不太了解 学习中
孤独剑客 2008-11-04
  • 打赏
  • 举报
回复
好的
我知道了
谢谢大家
ZangXT 2008-11-04
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 liuyuanshijie 的回复:]
系统会主动回收或者处理那些new 的对象,也就是收回内存
但是一些特殊的不通过new 的对象就收不回啊
你们说我不需要对这个东西进一步了解吗
这个有点复杂,呵呵
[/Quote]
刚学习不必理会这些细节的问题,先大体的把基础知识过一遍,写点东西,慢慢体会.
ZangXT 2008-11-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 number321 的回复:]
引用 1 楼 cydp007 的回复:
jvm觉得什么时候该收集的时候就收集..

你调用不一定收集.


我想应该是system.gc以后就直接开始垃圾回收了吧,这个"不一定收集"应该是回收需要时间,不一定能及时就回收掉的意思吧
[/Quote]
就是不一定.
孤独剑客 2008-11-04
  • 打赏
  • 举报
回复
系统会主动回收或者处理那些new 的对象,也就是收回内存
但是一些特殊的不通过new 的对象就收不回啊
你们说我不需要对这个东西进一步了解吗
这个有点复杂,呵呵
w2gavin 2008-11-04
  • 打赏
  • 举报
回复
System.gc();
可以由用户指定调用垃圾回收函数

一般情况下,当变量超出作用域时,JVM会自动调用GC
number321 2008-11-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 cydp007 的回复:]
jvm觉得什么时候该收集的时候就收集..

你调用不一定收集.
[/Quote]

我想应该是system.gc以后就直接开始垃圾回收了吧,这个"不一定收集"应该是回收需要时间,不一定能及时就回收掉的意思吧
number321 2008-11-04
  • 打赏
  • 举报
回复
不知道用System.gc()是不是会立刻垃圾回收,但显式使用它以后一定会调用finallize()

否则就要内存使用到一定程度以后才会自动调用finallize() (相当于调用了system.gc??)
不知道这个时候是不是垃圾回收的时刻
justinavril 2008-11-04
  • 打赏
  • 举报
回复
既然都是垃圾了 就不要太关心它了

处理机制还是比较底层的东西 我不会 但我想一句话也说不清楚 楼主现在没必要关心这个 等以后有时间看看jvm的规范 没准里面有介绍
cydp007 2008-11-04
  • 打赏
  • 举报
回复
jvm觉得什么时候该收集的时候就收集..

你调用不一定收集.

62,634

社区成员

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

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