Java的垃圾回收机制:强制回收System.gc() Runtime.getTime().gc()
垃圾回收
当引用类型的实体,如对象、数组等不再被任何变量引用的时候。这块占用的内存就成为了垃圾。JVM会根据自己的策略决定是回收内存
注意:
- 垃圾回收只回收内存中的对象,无法回收物理资源(数据库连接,网络IO等)
- 程序无法精确的控制台垃圾回收的运行,垃圾回收汇总任何时候进行,系统自动。
- 在垃圾回收机制回收任何对象之前总会调用他的finalize()方法。
对象在内存中的三种状态:
- 可达状态:对象有变量再引用。
- 可恢复状态:如果一个对象没有任何变量引用它,但是调用了finalize()后又有新的变量引用了对象,中间的状态为“可恢复状态”。
- 不可达状态:对象没有变量引用,并且重新调用了finalize()方法后,还没有变成可达状态,就变为不可达状态,系统开始回收资源。
强制垃圾回收System.gc() Runtime.getRuntime.gc()
package com.zmd.study.rubbish; import javax.naming.Name; /** * @ClassName RubbishTest * @projectName: object1 * @author: Zhangmingda * @description: 测试干预垃圾回收 * date: 2021/4/6. */ public class RubbishTest { private String name; //构造方法 public RubbishTest(String name) { this.name = name; } //重写finalize增加输出便于观察是否自动回收了对象 @Override protected void finalize() throws Throwable { System.out.println(name + "要被回收了"); super.finalize(); } //测试创建多个对象,看垃圾有没有自动回收 public static void main(String[] args) { for(int i=0;i<1000; i++) { new RubbishTest("name" + i); System.out.println("循环打印" + "name" + i); //强制垃圾回收,当没有变量引用上面new出来的对象,就会调用finalize()方法回收内存 System.gc();
//Runtime.getRuntime().gc();
} } }
posted on 2021-04-06 09:05 zhangmingda 阅读(1219) 评论(0) 编辑 收藏 举报