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<User> list = new ArrayList<User>(); 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