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();
相关文章
相关标签/搜索