Java System gc() Method

The System.gc() method in Java is used to suggest that the Java Virtual Machine (JVM) perform garbage collection.

Table of Contents

  1. Introduction
  2. gc() Method Syntax
  3. Examples
    • Basic Usage
    • Forcing Garbage Collection
    • Monitoring Garbage Collection
  4. Real-World Use Case
  5. Conclusion

Introduction

The System.gc() method is a static method in the System class. It suggests to the JVM that it would be a good time to run the garbage collector, which is responsible for reclaiming memory occupied by unreachable objects. Note that this is only a suggestion, and the JVM may choose to ignore it.

gc() Method Syntax

The syntax for the gc() method is as follows:

public static void gc()

Returns:

  • This method does not return any value.

Throws:

  • SecurityException if a security manager exists and its checkPermission method doesn't allow the RuntimePermission("gc").

Examples

Basic Usage

To demonstrate the basic usage of gc(), we will call the method and observe its effect on memory usage.

Example

public class GcExample {
    public static void main(String[] args) {
        // Allocate a large amount of memory
        int[] largeArray = new int[1000000];
        System.out.println("Array created.");

        // Suggest garbage collection
        System.gc();
        System.out.println("Garbage collection suggested.");
    }
}

Output:

Array created.
Garbage collection suggested.

Forcing Garbage Collection

While System.gc() is a suggestion, you can combine it with other techniques to increase the likelihood of garbage collection, such as creating many objects and nullifying references.

Example

public class ForceGcExample {
    public static void main(String[] args) {
        for (int i = 0; i < 100; i++) {
            int[] largeArray = new int[1000000];
            // Nullify the reference to make the object eligible for GC
            largeArray = null;
        }
        // Suggest garbage collection
        System.gc();
        System.out.println("Garbage collection suggested after nullifying references.");
    }
}

Output:

Garbage collection suggested after nullifying references.

Monitoring Garbage Collection

To monitor garbage collection, you can use the Runtime.getRuntime().addShutdownHook method to add a shutdown hook that prints a message when the program terminates, indicating that garbage collection occurred.

Example

public class GcMonitoringExample {
    public static void main(String[] args) {
        Runtime.getRuntime().addShutdownHook(new Thread(() -> {
            System.out.println("Shutdown hook: Program is terminating, garbage collection may have occurred.");
        }));

        // Allocate memory and suggest GC
        for (int i = 0; i < 100; i++) {
            int[] largeArray = new int[1000000];
            largeArray = null;
        }
        System.gc();
        System.out.println("Garbage collection suggested. Program will terminate soon.");
    }
}

Output:

Garbage collection suggested. Program will terminate soon.
Shutdown hook: Program is terminating, garbage collection may have occurred.

Real-World Use Case

Memory Management in Long-Running Applications

In long-running applications, it may be useful to suggest garbage collection periodically to manage memory usage. However, this should be done judiciously, as unnecessary calls to System.gc() can degrade performance.

Example

public class MemoryManagementExample {
    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            // Simulate some processing
            for (int j = 0; j < 1000000; j++) {
                String temp = new String("Temporary String " + j);
            }

            // Suggest garbage collection every few iterations
            if (i % 3 == 0) {
                System.gc();
                System.out.println("Suggested garbage collection at iteration: " + i);
            }
        }
    }
}

Output:

Suggested garbage collection at iteration: 0
Suggested garbage collection at iteration: 3
Suggested garbage collection at iteration: 6
Suggested garbage collection at iteration: 9

Conclusion

The System.gc() method in Java provides a way to suggest that the JVM perform garbage collection. By understanding how to use this method, you can help manage memory in your Java applications. Whether you are suggesting garbage collection in long-running applications, monitoring garbage collection, or managing memory usage, the gc() method offers a straightforward way to interact with the garbage collector in Java. However, it is important to use this method judiciously, as unnecessary calls can affect performance.

Comments