作者tkcn (小安)
看板java
标题Re: [问题] GC回收的内容
时间Wed Mar 3 16:18:06 2010
※ 引述《comaniac (coding cody)》之铭言:
: 经过上篇各位的帮忙
: 我测试後发现GC没有动静似乎和我使用了Class Loader有关
: 虽然我在Inside JVM那本书
: 有关GC的章节上看到分析Class Loader 的reachable graph
: 也依照他的作法将local variable在最後设为null
: 但对class loader来说似乎不足以让GC去动他
: (详细原因我不太清楚,但我将object换成new string後GC就跑起来了)
: 有关class loader的reachable问题我会继续找答案@@
: 现在比较麻烦的问题是找不太到看GC释放object的内容
: 本来以为jvmtiEventCallbacks.ObjectFree是在object被free时启动的event
: 但经过测试可能是我误会了@@
: 不知各位高手有没有什麽好方法可以知道GC到底free了哪些东西
: 再次感谢各位m(_ _)m
刚刚跑去偷懒来不及回上一篇... XD
下面是我修改你的范例的结果:
public static void main(String[] args) {
for (int i = 1; i < 5000; ++i) {
Object o = new Object(){
public void finalize(){
System.out.println("garbage");;
}
};
o = null;
System.gc();
}
}
---
The finalize() method is guaranteed to run once and only once
before the garbage collector deletes an object.
物件只有在 unreachable 时才会经由 GC 执行 finalize(),
在执行完 finalize() 之後,如果此物件仍然是 unreachable,就会进行回收。
所以只要利用 overrid finalize method,
就 "勉强" 可以达到观察 GC 回收物件的目的,
虽然在执行 finalize 的同时,"此物件其实还没被回收"。
另外用这个方法,
也只能观察到能够被 override finalize 的 method,
对於那些在 object 中所使用的 object 就无能为力了。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.122.183.199
1F:推 comaniac:那个finalize是写在其他method里面的吗@@?? 03/03 18:17
2F:→ tkcn:这个叫 Anonymous Inner Class,可参考 #1BWsrtyr 03/03 19:10
3F:推 comaniac:原来如此,感激不尽! 03/03 20:03