Open In App

How to find max memory, free memory and total memory in Java?

Although Java provides automatic garbage collection, sometimes you will want to know how large the object heap is and how much of it is left. This information can be used to check the efficiency of code and to check approximately how many more objects of a certain type can be instantiated. To obtain these values, we use the 
totalMemory() and freeMemory methods. 

As we know Java’s garbage collector runs periodically to recycle unused objects. We can call garbage collector on demand by calling the gc() method. A good thing to try is to call gc() and then call freeMemory().

Methods: 

public void gc()
Returns: NA.
Exception: NA.
public long freeMemory()
Returns: an approximation to the total
amount of memory currently available for
future allocated objects, measured in bytes.
Exception: NA.
public long totalMemory()
Returns: the total amount of memory 
currently available for current and future 
objects, measured in bytes.
Exception: NA.




// Java code illustrating gc(), freeMemory()
// and totalMemory() methods
class memoryDemo
{
    public static void main(String arg[])
    {
        Runtime gfg = Runtime.getRuntime();
        long memory1, memory2;
        Integer integer[] = new Integer[1000];
 
        // checking the total memory
        System.out.println("Total memory is: "
                           + gfg.totalMemory());
 
        // checking free memory
        memory1 = gfg.freeMemory();
        System.out.println("Initial free memory: "
                                      + memory1);
 
        // calling the garbage collector on demand
        gfg.gc();
 
        memory1 = gfg.freeMemory();
 
        System.out.println("Free memory after garbage "
                           + "collection: " + memory1);
 
        // allocating integers
        for (int i = 0; i < 1000; i++)
            integer[i] = new Integer(i);
 
        memory2 = gfg.freeMemory();
        System.out.println("Free memory after allocation: "
                           + memory2);
 
        System.out.println("Memory used by allocation: " +
                                    (memory1 - memory2));
 
        // discard integers
        for (int i = 0; i < 1000; i++)
            integer[i] = null;
 
        gfg.gc();
 
        memory2 = gfg.freeMemory();
        System.out.println("Free memory after  "
            + "collecting discarded Integers: " + memory2);
    }
}

Output: 

Total memory is: 128974848
Initial free memory: 126929976
Free memory after garbage collection: 128632384
Free memory after allocation: 127950744
Memory used by allocation: 681640
Free memory after collecting discarded Integers: 128643696

 


Article Tags :