2012-04-28 66 views
1

在Java中,是否有可能准确找到java.lang.OutOfMemoryError发生的位置?确定OutOfMemory错误的位置

我期待更好地了解多少内存究竟是怎么做我的应用程序了一个自称是你可以赶上的OutOfMemoryError,并要求运行,如下图所示未能

+1

它会抛出异常并转储堆栈跟踪吗?这应该告诉你到底发生错误时代码的作用。 – 2012-04-28 16:46:38

+0

有点粗糙。在JVM中发生了很多事情,很难知道哪个线程是罪魁祸首。打破的线程不一定是吃掉所有内存的线程。 – 2012-04-28 16:46:49

+0

@AdamLiss问题不在于代码出现问题的位置。问题是,对于应用程序,有多少内存“太多内存” – JAM 2012-04-28 16:47:22

回答

2

之前。

try { 
    //... 
} catch (OutOfMemoryError er) { 
    // this will tell you how much you have used 
    long heapSize = Runtime.getRuntime().totalMemory(); 
    System.err.println("memory used "+heapSize); 
} 

,如果你不知道在哪里在你的代码就会失败(OutOfMemoryError而应该当堆内存用完发生)

,你可以尝试注册一个关闭挂钩,并输出HEAPSIZE那里。

+0

绝对是个好主意!谢谢布鲁斯 – JAM 2012-04-28 17:21:52