user697911
user697911

Reputation: 10531

Runtime heap size set in Eclipse

public class Test {
        public static void main(String[] args) {
            long heapsize = Runtime.getRuntime().totalMemory();
            System.out.println("heapsize is :: " + heapsize/(1024*1024));
        }

}

The output is:

heapsize is :: 245

Does this mean my runtime has only 245M memory? My computer has 8GB memory. I doubt output this is correct, since the running of Eclipse alone will consume a lot more than 245M.

In Eclipse, I click Windows->Preferences->Java->Installed JREs, and set Default JVM arguments as follows:

-ea -Xms256m -Xmx4096M

Then run the test again. It still prints out the same number, 245. How could this happen?

Edited: from Java doc for Runtime.getRuntime().totalMemory():

Returns the total amount of memory in the Java virtual machine. 
The value returned by this method may vary over time, depending on the 
host environment.

Upvotes: 3

Views: 280

Answers (1)

dovetalk
dovetalk

Reputation: 1991

Your program doesn't run in Eclipse's heap space. Eclipse spawns off a separate JVM for your program.

Runtime.totalMemory() does indeed return the current heap size.

The -Xms argument specifies the initial heap size. Java will expand if it cannot free up enough memory through garbage collection until it reaches the maximum, as set by -Xmx. At this point, the JVM will exit with an OutOfMemoryError.

Java memory management is a complex topic, involving garbage collection, moving objects from nursery to tenured space, etc.

Upvotes: 1

Related Questions