41. 如何手动触发全量回收垃圾,如何立即触发垃圾回收

垃圾回收机制具有的特征

  • 垃圾回收机制只负责回收堆内存的对象,不会回收任何物理资源(例如数据库连接、网络IO等资源)
  • 程序无法精确控制垃圾回收的运行,垃圾回收会在合适的时候进行。当对象永久地失去引用后,系统就会在合适的时候回收它所占的内存
  • 在垃圾回收机制回收任何对象之前,总会先调用它的finalize()方法,该方法可能使该对象重新复活(让一个引用变量重新引用该对象),从而导致垃圾回收机制取消回收。

对象在内存中的状态

  • 可达状态:当一个对象被创建后,若有一个以上的引用变量引用它,则这个对象在程序中处于可达状态。
  • 可恢复状态:如果程序中某个对象不再有任何引用变量引用它,它就进入了可恢复状态。
  • 不可达状态:当对象与所有引用变量的关联都被切断,且系统已经调用所有对象的finalize()方法后依然没有使对象变成可达状态,那么这个对象将永久的失去引用,最后变成不可达状态。
 public static void main(String[] args) {
        String a = new String("Grim");
        a = new String("Mjx");
}

第一句对象"Grim"为可达状态,执行第二句之后"Mjx"是可达状态。但是"Grim"这个字符串对象变成了可恢复状态。

强制触发垃圾回收方法

  • 调用System类的gc()静态方法:System.gc();
  • 调用Runtime对象的gc()实例方法:Runtime.getRuntime().gc();
原文地址:https://www.cnblogs.com/GrimMjxCl/p/9471797.html