Java Tool Tutorials - Herong's Tutorial Notes
Dr. Herong Yang, Version 5.11

Garbage Collection Testing Program

This section provides a tutorial example on how to write a simple program to test how the garbage collector works.

Since most of "jstat" options are about garbage collection statistics, I wrote this garbage collection testing program to test the "jstat" tool:

/**
 * GarbageCollection.java
 * Copyright (c) 2008 by Dr. Herong Yang, http://www.herongyang.com/
 */
class GarbageCollection {
   public static void main(String[] a) {
      int max = 10000;
      int min = 16;
      Object[] arr = new Object[min];
      Runtime rt = Runtime.getRuntime();
      System.out.println("Free/total memory:");
      for (int m=0; m<max; m++) {
      	 for (int n=0; n<min-1; n++) arr[min-n-1] = arr[min-n-2];
         arr[0] = getOneMega();
         System.out.println(rt.freeMemory()+"   "+rt.totalMemory());
      	 try {
      	    Thread.sleep(1000/10);
      	 } catch (InterruptedException e) {
            System.out.println("Interreupted...");
      	 }
      }
   }
   private static Object getOneMega() {
      // return new long[1024*128]; // 1MB
      Object[] lst = new Object[10];
      lst[0] = new long[256*128];
      lst[1] = new int[256*256];
      lst[2] = new double[256*128];
      lst[3] = new float[64*256];
      lst[4] = new byte[64*1024];
      String[] l = new String[64*64];
      for (int i=0; i<64*64; i++) 
      	 l[i] = new String("12345678"); // 16B
      lst[5] = l;
      lst[6] = new char[64*512];
      return lst;
   }
}

When I run this program, I get this output:

C:\herong>\Progra~1\java\jdk1.6.0_02\bin\javac GarbageCollection.java

C:\herong>\Progra~1\java\jdk1.6.0_02\bin\java 
   -Xms24m -Xmx24m GarbageCollection

Free/total memory:
23725256   25034752
22710400   25034752
21618728   25034752
20523584   25034752
19429328   25034752
18330752   25034752
17237416   25034752
16137560   25034752
15040664   25034752
13943848   25034752
12843752   25034752
11747448   25034752
10650832   25034752
 9552096   25034752
 8452192   25034752
 7357216   25034752
 6258720   25034752
 5159112   25034752
 4060976   25034752
 2965296   25034752
 1865656   25034752
  767256   25034752
 7356032   25034752   // Garbage Collection
 6257576   25034752
 5159368   25034752
 4060712   25034752
 2964336   25034752
 1867032   25034752
  767176   25034752
 7356512   25034752   // Garbage Collection
 6258136   25034752
 5159360   25034752
 4060464   25034752
 2964064   25034752
 1866728   25034752
  766568   25034752
 7356272   25034752   // Garbage Collection
...

The output shows that the garbage collector is working correctly to remove those objects shifted out of the arr[].

Sections in This Chapter

'jps' - JVM Process Status Tool

Listing JVM Processes on the Local Machine with "jps"

'jstatd' - JVM Remote Monitoring Server

Starting 'jstatd' with a Security Policy File

Connecting to 'jps' to Remote 'jstatd'

'jstat' Command Options and Parameters

Garbage Collection Testing Program

'jstat -gcutil' - Garbage Collection Statistics

Accessing Remote JVM Processes with 'jstat'

Dr. Herong Yang, updated in 2008
Garbage Collection Testing Program