Generate java dump when OutOfMemory
Solution 1
For starter drop the XX options and any options BEFORE VeryLargeObject
, otherwise you pass the parameters to the java program and not the JVM
Solution 2
The problem is that -XX:HeapDumpPath
spefies a file and not a path.
-Xms1024m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath="c:\temp\dump2.hprof"
added:
and bestsss is right too, so you need to fix both "errors":
java -Xms1024m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath="c:\temp\dump2.hprof" VeryLargeObject
Solution 3
I suspect the jvm could not write to the path and fails silently. For example, this has to be a file name in a directory which exists. If you have a directory D:\workspace
it will fail. If you have D:\workspace\heap.hprof
it may work. Try creating a blank file of that name first to see you can do this.
Comments
-
Andrei Ciobanu almost 2 years
I have a program that should eventually generate
OutOfMemory
. The program code is:public class VeryLargeObject implements Serializable { public static final int SIZE = 1 << 12; public String tag; public int[][] bigOne = new int[SIZE][SIZE]; { // Initialize bigOne for(int i = 0; i < SIZE ; ++i) { for(int j = 0; j < SIZE; ++j) { bigOne[i][j] = (int) (Math.random() * 100); } } } public VeryLargeObject(String tag) { this.tag = tag; } public static void main(String args[]) { VeryLargeObject[] vla = new VeryLargeObject[1 << 12]; for(int i = 0; i < Integer.MAX_VALUE; ++i) { vla[i] = new VeryLargeObject("aa"); } } }
I run the program with the following parameters:
java VeryLargeObject -Xms1024m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath="D:\workspace"
The program fails with OutOfMemory but no dump file is generated . Do you have any idea why?
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space at VeryLargeObject.<init>(VeryLargeObject.java:14) at VeryLargeObject.main(VeryLargeObject.java:32)
-
Vipin over 10 yearsi dont find any documentation for VeryLargeObject , can u give us some authentic link.
-
It's Leto over 10 years'-XX:HeapDumpPath' can also be a path, like this: '-XX:HeapDumpPath=c:/', which will generate dumps with the pattern "java_pid4128.hprof" in the root direcoty of drive C:
-
bestsss about 10 years@Vipin, 'VeryLargeObject' is the class containing the
main(String[])
. Look at the question, itself. -
Vipin about 10 yearsi did not notice it , well now i got it :)