这个程序是为了证明:有两个对象,相互引用,只要它们和根进程不可达的,那么GC也是可以回收它们的。复制代码
- import java.io.IOException;
- public class GarbageTest {
- /**
- * @param args
- * @throws IOException
- */
- public static void main(String[] args) throws IOException {
- // TODO Auto-generated method stub
- try {
- gcTest();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- System.out.println("has exited gcTest!");
- System.in.read();
- System.in.read();
- System.out.println("out begin gc!");
- for(int i=0;i<100;i++)
- {
- System.gc();
- System.in.read();
- System.in.read();
- }
- }
- private static void gcTest() throws IOException {
- System.in.read();
- System.in.read();
- Person p1 = new Person();
- System.in.read();
- System.in.read();
- Person p2 = new Person();
- p1.setMate(p2);
- p2.setMate(p1);
- System.out.println("before exit gctest!");
- System.in.read();
- System.in.read();
- System.gc();
- System.out.println("exit gctest!");
- }
- private static class Person
- {
- byte[] data = new byte[20000000];
- Person mate = null;
- public void setMate(Person other)
- {
- mate = other;
- }
- }
- }
1.JPG (215.41 KB, 下载次数: 9)
红字,程序没开始的内存
2.JPG (213.95 KB, 下载次数: 9)
开始,并输入点数据创建里对象,由于对象创建了很大的数组占用了许多内存 ... ...
3.JPG (225.77 KB, 下载次数: 10)
间断输入数据,令程序进行,下面打印语句显示类似GC已经启动了的英文打印语句,同时发现内存被释放了,但是 ...
4.JPG (233.19 KB, 下载次数: 15)
程序运行完毕
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |