The System.gc()
method in Java is used to suggest that the Java Virtual Machine (JVM) perform garbage collection.
Table of Contents
- Introduction
gc()
Method Syntax- Examples
- Basic Usage
- Forcing Garbage Collection
- Monitoring Garbage Collection
- Real-World Use Case
- 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 itscheckPermission
method doesn’t allow theRuntimePermission("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.