Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.
like image 794
user697911 Avatar asked Dec 04 '25 09:12

user697911


1 Answers

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.

like image 113
dovetalk Avatar answered Dec 06 '25 21:12

dovetalk



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!