在最近的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,但我不是很肯定,如果它是用來實現這一目的。