Programming Tutorials

Using totalMemory() and freeMemory() in Java

By: Hong in Java Tutorials on 2007-09-02  

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. You can use this information, for example, to check your code for efficiency or to approximate how many more objects of a certain type can be instantiated. To obtain these values, use the totalMemory() and freeMemory() methods.

Java's garbage collector runs periodically to recycle unused objects. However, sometimes you will want to collect discarded objects prior to the collector's next appointed rounds. You can run the garbage collector on demand by calling the gc() method. A good thing to try is to call gc() and then call freeMemory() to get a baseline memory usage. Next, execute your code and call freeMemory() again to see how much memory it is allocating. The following program illustrates this idea:

// Demonstrate totalMemory(), freeMemory() and gc().

class MemoryDemo {
    public static void main(String args[]) {

        Runtime r = Runtime.getRuntime();
        long mem1, mem2;
        Integer someints[] = new Integer[1000];
        System.out.println("Total memory is: " +
                r.totalMemory());
        mem1 = r.freeMemory();
        System.out.println("Initial free memory: " + mem1);
        r.gc();
        mem1 = r.freeMemory();
        System.out.println("Free memory after garbage collection: "
                + mem1);
        for (int i = 0; i < 1000; i++)
            someints[i] = i; // allocate integers
        mem2 = r.freeMemory();
        System.out.println("Free memory after allocation: "
                + mem2);
        System.out.println("Memory used by allocation: "
                + (mem1 - mem2));
        // discard Integers - 275 -
        for (int i = 0; i < 1000; i++)
            someints[i] = null;
        r.gc(); // request garbage collection
        mem2 = r.freeMemory();
        System.out.println("Free memory after collecting" +
                " discarded Integers: " + mem2);

    }
}

Sample output from this program is shown here (of course, your actual results may vary):

Total memory is: 1048568
Initial free memory: 751392
Free memory after garbage collection: 841424
Free memory after allocation: 824000
Memory used by allocation: 17424
Free memory after collecting discarded Integers: 842640





Add Comment

* Required information
1000

Comments

No comments yet. Be the first!

Most Viewed Articles (in Java )

Latest Articles (in Java)