日期:2014-05-20 浏览次数:20824 次
在java中,堆(heap)是对象被创建后所驻留的内存区。 //获取堆的当前大小,单位为字节(Byte),下同 long heapSize = Runtime.getRuntime().totalMemory(); // 获取堆内存的最大值,堆所占用的内存不能超过这个值. // 否则将导致异常(OutOfMemoryException) long heapMaxSize = Runtime.getRuntime().maxMemory(); // 获取堆中空闲内存的大小. 这个值会随着垃圾回收(GC)而增加, // 也会随着新对象的创建而减小 long heapFreeSize = Runtime.getRuntime().freeMemory();
------解决方案--------------------
PermGen Space?估计是类存储区不够大。
在运行是加入下面这几个参数试试。
-XX:PermSize=64M
-XX:MaxPermSize=128M
在网上找了一段解释:
PermGen space的全称是Permanent Generation space,是指内存的永久保存区域,这块内存主要是存放Class和Meta信息的,Class在被Loader时就会被放到PermGen space中,它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果APP会LOAD很多CLASS的话,就很可能出现PermGen space错误,这种错误常见在web服务器对JSP进行pre compile的时候。
有些网页说得很详细:
http://www.wujianrong.com/archives/2006/12/javalangoutofmemoryerror_permg.html
http://www.totodotnet.net/2007/08/15/outofmemory%ef%bc%9apermgen-space%e5%bc%82%e5%b8%b8%e7%9a%84%e5%a4%84%e7%90%86%e5%92%8c%e5%88%86%e6%9e%90/
------解决方案--------------------
有没有定时器之类的。去看看