13

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)
5
  • 3
    Did you mean to say the heap file didnt generate? And shouldn't it be -XX:-HeapDumpOnOutOfMemoryError instead of -XX:+HeapDumpOnOutOfMemoryError (notice the + sign) Commented Feb 8, 2011 at 16:29
  • >The program fails with OutOfMemory but now dump if file is generated. -- Is it a typo? - do you mean now or no? Commented Feb 8, 2011 at 16:43
  • @CoolBeans: The official site: docs.oracle.com/javase/7/docs/webnotes/tsg/TSG-VM/html/… says that the option shoud be with + sign Commented Jun 8, 2018 at 8:41
  • @BalabanMario Hi - I am sorry, I am not sure if I follow. So the official docs say the same thing right? "-XX:+HeapDumpOnOutOfMemoryError" ? Were you just confirm that? Commented Jun 8, 2018 at 15:55
  • @CoolBeans > if there is a minus ("-XX:-HeapDumpOnOutOfMemoryError"), then it is the opposite, "turn off" Commented Jun 11 at 8:59

3 Answers 3

21

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
Sign up to request clarification or add additional context in comments.

1 Comment

'-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:
13

For starter drop the XX options and any options BEFORE VeryLargeObject, otherwise you pass the parameters to the java program and not the JVM

3 Comments

i dont find any documentation for VeryLargeObject , can u give us some authentic link.
@Vipin, 'VeryLargeObject' is the class containing the main(String[]). Look at the question, itself.
i did not notice it , well now i got it :)
5

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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.