Jvm OutofMemory异常详细信息

Jvm OutofMemory异常详细信息,jvm,out-of-memory,Jvm,Out Of Memory,在最近的一次Java采访中,我被问到了这个问题。 当我们得到OutOfMemory异常时,我们如何找出哪个类和哪个方法抛出了OutOfMemory异常。我回答说它将出现在堆栈跟踪中,但他告诉我,很多时候它不会告诉您哪个特定的方法/类抛出了该异常。我猜他期待着一些工具或JVM参数可以帮助他。但我从来没用过,所以我无法回答 我尝试了一个简单的例子,在这个例子中,我将值放在一个无限循环的hashmap中。过了一段时间,我得到了一个OutOfMemory错误,它确实显示了类/方法名和行号。我想了解在什么

在最近的一次Java采访中,我被问到了这个问题。 当我们得到OutOfMemory异常时,我们如何找出哪个类和哪个方法抛出了OutOfMemory异常。我回答说它将出现在堆栈跟踪中,但他告诉我,很多时候它不会告诉您哪个特定的方法/类抛出了该异常。我猜他期待着一些工具或JVM参数可以帮助他。但我从来没用过,所以我无法回答

我尝试了一个简单的例子,在这个例子中,我将值放在一个无限循环的hashmap中。过了一段时间,我得到了一个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:+heapdumponootfmemoryerror-XX:HeapDumpPath但我不确定它是否用于实现此目的。

如果Java堆空间不足,您可能会看到哪个特定对象在抛出异常,如果它是您自己的对象之一,但是它很可能是一个内部Java对象,它在做一些低级的延迟内部工作,在这种情况下,跟踪并不是很有帮助

Xms选项定义了允许的最大堆大小,Xms选项定义了最小堆大小,因此如果不是内存泄漏/开销问题,它应该可以解决您的问题

如果您怀疑您的程序使用的内存比需要的多得多,那么有一些工具可以跟踪内存使用情况