Sef*_*ffi 7 java garbage-collection
我正在尝试使用-verbosegc标志来监控应用中的gc活动.我可以看到有完整和次要的集合,但有没有办法确定(确定事件/ vm标志/其他什么)实际收集的对象?
谢谢!
有关内存中对象的一般信息,我建议您查看jvisualvm(它位于JDK的bin文件夹中).它有很多关于VM在程序运行时正在做什么的有用信息,包括有关各种对象和内存状态的信息.
如果您想要更具体的东西,可以使用WeakReferences和ReferenceQueues.如果您只对几种类型的对象感兴趣,则此选项可能是可行的.您可以使用公共ReferenceQueue创建对象的WeakReference,然后让另一个线程定期检查Queue(请注意,队列只表示对象可以访问,而不是实际收集它们):
static ReferenceQueue<MyObject> MY_QUEUE = new ReferenceQueue<MyObject>();
static class MyReference extends WeakReference<MyObject>{
public final String name;
public MyReference(MyObject o, ReferenceQueue<MyObject> q){
super(o, q);
name = o.toString();
}
}
static{
Thread t = new Thread(){
public void run(){
while(true){
MyReference r = (MyReference)MY_QUEUE.remove();
System.out.println(r.name+" eligible for collection");
}
}
}
t.setDaemon(true);
t.start();
}
public MyObject(){
//normal init...
new MyReference(this, MY_QUEUE);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6158 次 |
| 最近记录: |