/** * OOMHeapTest class * @author rosen jiang */package org.rosenjiang.test;
import java.util.Date;import java.util.HashMap;import java.util.Map;import org.rosenjiang.bo.Pilot;
publicclass OOMHeapTest {publicstaticvoid main(String[] args){ oom(); }privatestaticvoid oom(){ Map<String, Pilot> map = new HashMap<String, Pilot>(); Object[] array = new Object[1000000];for(int i=0; i<1000000; i++){ String d = new Date().toString(); Pilot p = new Pilot(d, i); map.put(i+"rosen jiang", p); array[i]=p; } }}
是的,上面构造了很多的Pilot类实例,向数组和map中放。由于是StrongRef,GC自然不会回收这些对象,一直放在heap中直到溢出。当然在运行前,先要在Eclipse中配置VM参数-XX:+HeapDumpOnOutOfMemoryError。好了,一会儿功夫内存溢出,控制台打出如下信息。