http://smallnetvisitor.iteye.com/blog/1826434
User.java
package gc;
import java.util.ArrayList;
import java.util.List;
/**
* @Package gc
* @ClassName: User
* @Description: TODO(这里用一句话描述这个类的作用)
* @author andy
* @date 2013-6-9 下午4:46:13
*/
public class User {
private String id;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public User(String id, String name) {
super();
this.id = id;
this.name = name;
}
public static void main(String[] args) {
List list = new ArrayList();
for (int i = 1; i < 10000; i++) {
User o = new User(i + "", System.currentTimeMillis() + "");
list.add(o);
o = null;
}
System.out.println("end");
try {
Thread.sleep(100000000l);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
运行user任务管理器查看到的pid号:
基于jmap导出的堆信息:
用装了mat插件的eclipse打开firstHeap.bin文件
选择Leak Suspects Reports模式,finish
点击details
这些对象有可能会溢出,然后我们打开OQL窗口
执行如下OQL语句
也就是说这个是null,但是仍然有强引用存在,gc的时候是不能回收的,这样就会出现内存的溢出问题
不懂就按F1,关于OQL有详细介绍,
或进官网 mat Querying Heap Objects:http://help.eclipse.org/indigo/index.jsp?topic=%2Forg.eclipse.mat.ui.help%2Ftasks%2Fqueryingheapobjects.html