在最近的Java访谈中,我被问到了这个问题。 当我们得到一个OutOfMemory异常时,我们如何才能找出哪个类和哪个方法抛出了OutOfMemory异常。我回答说它会出现堆栈跟踪,但他告诉我,很多时候它不会告诉你哪个特定的方法/类抛出了异常。我假设他期待可以提供帮助的一些工具或JVM参数。但我从来没有用过它,所以我无法回答。OutofMemory异常详细信息
我尝试了一个简单的例子,我将值放入一个无限循环的散列表中。过了一段时间,我得到一个OutOfMemory错误,它显示了类/方法名称和行号。我想了解什么情况下它不会给你这些细节[method/classname]以及我可以用来找出它的工具/ VM参数。
**Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Unknown Source)
at java.lang.AbstractStringBuilder.expandCapacity(Unknown Source)
at java.lang.AbstractStringBuilder.ensureCapacityInternal(Unknown Source)
at java.lang.AbstractStringBuilder.append(Unknown Source)
at java.lang.StringBuilder.append(Unknown Source)
at hashmapTest.main(hashmapTest.java:18)**
我也看到这个VM参数 Xms1024m -Xmx1024m -XX:+ HeapDumpOnOutOfMemoryError -XX:HeapDumpPath,但我不是很肯定,如果它是用来实现这一目的。