Java Tutorials - Herong's Tutorial Examples - v8.22, by Herong Yang
gc() - The Garbage Collection Method
This section provides a tutorial example on how to use the garbage collection method gc() on the default Runtime object to control the garbage collection process by yourself.
If you do not like the way JVM automatically performing the garbage collection process. you can use the gc() method of the default Runtime object to control the garbage collection process by yourself.
To test this gc() method, I modified the tutorial example presented in the previous section to explicitly perform garbage collection whenever the free memory size is below 10 MB:
/* GarbageCollectionForced.java
* Copyright (c) HerongYang.com. All Rights Reserved.
*/
class GarbageCollectionForced {
public static void main(String[] a) {
int steps = 10000;
int size = 32;
Object[] queue = new Object[size];
Runtime rt = Runtime.getRuntime();
System.out.println("Memory: Maximum Total Free Used");
for (int m=0; m<steps; m++) {
for (int n=0; n<size-1; n++)
queue[size-n-1] = queue[size-n-2];
queue[0] = getOneMega();
System.out.println(m+" "+rt.maxMemory()
+" "+rt.totalMemory()+" "+rt.freeMemory()
+" "+(rt.totalMemory()-rt.freeMemory()));
// Forcing a garbage collection
if (rt.freeMemory()<10485760) {
rt.gc();
System.out.println(m+" "+rt.maxMemory()
+" "+rt.totalMemory()+" "+rt.freeMemory()
+" "+(rt.totalMemory()-rt.freeMemory())
+" //Garbage collected");
}
try {
Thread.sleep(1000/10);
} catch (InterruptedException e) {
System.out.println("Interreupted...");
}
}
}
private static Object getOneMega() {
return new long[1024*128]; // 1MB
}
}
Running this modified sample program, I got the following output:
Memory:
Maximum Total Free Used
0 66650112 5177344 3948456 1228888
0 66650112 5177344 4000416 1176928 //Garbage collected
1 66650112 5177344 2951824 2225520
1 66650112 5177344 2951824 2225520 //Garbage collected
2 66650112 5177344 1903232 3274112
2 66650112 6410240 3136128 3274112 //Garbage collected
3 66650112 6410240 2087536 4322704
3 66650112 8159232 3836672 4322560 //Garbage collected
4 66650112 8159232 2788080 5371152
4 66650112 9908224 4537072 5371152 //Garbage collected
5 66650112 9908224 3488480 6419744
5 66650112 11653120 5233376 6419744 //Garbage collected
6 66650112 11653120 4184784 7468336
6 66650112 13402112 5933776 7468336 //Garbage collected
7 66650112 13402112 4885184 8516928
7 66650112 15347712 6826848 8520864 //Garbage collected
8 66650112 15347712 5778256 9569456
8 66650112 17158144 7599600 9558544 //Garbage collected
9 66650112 17158144 6551008 10607136
9 66650112 19038208 8434088 10604120 //Garbage collected
10 66650112 19038208 7385496 11652712
10 66650112 20918272 9267840 11650432 //Garbage collected
11 66650112 20918272 8219248 12699024
11 66650112 22794240 10096904 12697336 //Garbage collected
12 66650112 22794240 9048312 13745928
12 66650112 24674304 10929744 13744560 //Garbage collected
13 66650112 24674304 9881152 14793152
13 66650112 26554368 11762080 14792288 //Garbage collected
14 66650112 26554368 10713488 15840880
15 66650112 26554368 9665008 16889360
15 66650112 30310400 13421040 16889360 //Garbage collected
16 66650112 30310400 12372448 17937952
17 66650112 30310400 11323856 18986544
18 66650112 30310400 10275264 20035136
18 66650112 35946496 15911360 20035136 //Garbage collected
19 66650112 35946496 14862768 21083728
20 66650112 35946496 13814176 22132320
21 66650112 35946496 12765584 23180912
22 66650112 35946496 11716992 24229504
23 66650112 35946496 10668400 25278096
24 66650112 35946496 9619808 26326688
24 66650112 47218688 20892000 26326688 //Garbage collected
25 66650112 47218688 19843408 27375280
26 66650112 47218688 18794816 28423872
27 66650112 47218688 17746224 29472464
28 66650112 47218688 16697632 30521056
29 66650112 47218688 15649040 31569648
30 66650112 47218688 14600448 32618240
31 66650112 47218688 13551856 33666832
32 66650112 47218688 12503264 34715424
33 66650112 47218688 11454672 35764016
34 66650112 47218688 10406080 36812608
34 66650112 62246912 27531488 34715424 //Garbage collected
35 66650112 62246912 26482896 35764016
36 66650112 62246912 25434304 36812608
37 66650112 62246912 24385712 37861200
38 66650112 62246912 23337120 38909792
39 66650112 62246912 22288528 39958384
40 66650112 62246912 21239936 41006976
41 66650112 62246912 20191344 42055568
42 66650112 62246912 19142752 43104160
43 66650112 62246912 18094160 44152752
44 66650112 62246912 17045568 45201344
45 66650112 62246912 15996976 46249936
46 66650112 62246912 14948384 47298528
47 66650112 62246912 13899792 48347120
48 66650112 62246912 12851200 49395712
49 66650112 62246912 11802608 50444304
50 66650112 62246912 10754016 51492896
51 66650112 62246912 9705424 52541488
51 66650112 62246912 27531488 34715424 //Garbage collected
...
Several interesting notes about the output:
Table of Contents
Execution Process, Entry Point, Input and Output
Primitive Data Types and Literals
Bits, Bytes, Bitwise and Shift Operations
Managing Bit Strings in Byte Arrays
Reference Data Types and Variables
StringBuffer - The String Buffer Class
System Properties and Runtime Object Methods
Generic Classes and Parameterized Types
Generic Methods and Type Inference
Lambda Expressions and Method References
Java Modules - Java Package Aggregation
Execution Threads and Multi-Threading Java Programs
ThreadGroup Class and "system" ThreadGroup Tree
Synchronization Technique and Synchronized Code Blocks
Deadlock Condition Example Programs
►Garbage Collection and the gc() Method
Garbage Collection and Unused Objects
The Automated Garbage Collection Process
►gc() - The Garbage Collection Method
Example Program of Using the gc() Method
Assert Statements and -ea" Option