黑马程序员技术交流社区
标题:
关于Java垃圾回收的一些问题
[打印本页]
作者:
丁岩
时间:
2013-5-14 14:43
标题:
关于Java垃圾回收的一些问题
本帖最后由 丁岩 于 2013-5-18 15:15 编辑
关于Java的垃圾回收机制,我有幸看到了这样的一段代码,但是看的不是很懂。。。有没有大神帮我解读一下这个代码的思路过程啊?
class Thrs1
{
static boolean gcrun = false;
static boolean f = false;
static int created = 0;
static int finalized = 0;
int i;
Thrs1()
{
i = ++created;
if(created == 47)
System.out.println("Created 47");
}
protected void finalize() {
if(!gcrun)
{
gcrun = true;
System.out.println(
"Beginning to finalize after " +
created + " Chairs 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 Thrs {
public static void main(String[] args) {
if(args.length == 0) {
System.err.println("Usage: \n" +
"java Garbage before\n or:\n" +
"java Garbage after");
return;
}
while(!Thrs1.f) {
new Thrs1();
new String("To take up space");
}
System.out.println(
"After all Chairs have been created:\n" +
"total created = " + Thrs1.created +
", total finalized = " + Thrs1.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);
}
}
复制代码
作者:
xuemeng
时间:
2013-5-14 19:13
本帖最后由 xuemeng 于 2013-5-14 19:15 编辑
我给来段简单的代码吧, 这代码也能说明问题, 比你的代码简单多了!!!
class Demo {
public static void main(String[] args) throws Exception {
// 当for循环次数太多, 也就是说产生的垃圾太多, 把下面的调用垃圾回收器的代码注释掉, 也可以看到垃圾回收器会执行
// 这就说明垃圾回收器即使不掉用, 在垃圾漫天飞的时候会出来工作.
for (int i = 0; i < 100000; i++) {
// 产生垃圾
new A(i);
}
// 调用垃圾回收器
// System.gc();
// 这里调用sleep方法的目的, 这里的目的是让主线程不要马上结束, 步然垃圾回收器线程没有执行时, 程序就结束了;
// Thread.sleep(100);
}
}
class A {
private int i;
public A(int i) {
this.i = i;
}
// 这里复写了Object的finalize方法,目的是让看到垃圾回收器有没有工作
public void finalize() {
System.out.println(i);
}
}
作者:
Sword
时间:
2013-5-18 10:40
如果问题未解决,请继续追问,如果问题解决了,请点击你的帖子下面的"编辑"重新编辑帖子,将分类改为“已解决”,谢谢合作!
作者:
袁梦希
时间:
2013-5-18 12:44
如果问题已经解决了,那么大家请把帖子的类型改为“已解决”,在自己帖子的左下角点编辑,然后选择帖子的分类进行改正
。{:soso_e163:}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2