开发者社区> 问答> 正文

Java如何强制系统垃圾回收?

Java如何强制系统垃圾回收?

展开
收起
小天使爱美 2020-04-07 14:00:33 1233 0
3 条回答
写回答
取消 提交回答
  • 当一个对象失去引用后,系统何时调用它的finalize()方法对它进行资源清理,何时它可以变成不可达状态,系统何时回收它占有的内存,对于程序完全透明。程序只能控制一个对象不再被任何引用变量引用,不能控制它何时被回收。

    程序可以强制系统进行垃圾回收——这种强制只是通知系统进行垃圾回收,但系统是否进行垃圾回收依然不能确定。大部分时候,程序强制垃圾回收后总是有一些效果:

    方法1:调用System类的gc()静态方法:System.gc()

    方法2:调用Runtime对象的gc()实例方法:Runtime.getRuntime().gc()

    2020-04-09 14:18:18
    赞同 展开评论 打赏
  • "强制系统垃圾回收有如下两个方法。 调用System类的gc()静态方法:System.gc() 调用Runtime对象的gc()实例方法:Runtime.getRuntime().gc()"

    2020-04-08 09:43:53
    赞同 展开评论 打赏
  • 有点尴尬唉 你要寻找的东西已经被吃掉啦!

    当对象对当前使用这个对象的应用程序变得不可触及的时百候,这个对象就可以被回收了。

    java垃圾回收是有jvm自动执行的,不是人为操作的,所以当不存在对某对度象的任何引用时,该对象就处于被jvm回收的状态,并不是马上予以销毁。 class Animal { public static void main(String[] args) { Animal lion = new Animal(); System.out.println("Main is completed."); } protected void finalize() { System.out.println("Rest in Peace!"); } }

    lion 对象在实例化行后从未被使用过。因此 Java 编译器作为一种优化措施可以直接在实例化行后赋值lion = null。因此,即使在 SOP 输出知之前, finalize 函数也能够打印出 'Rest in Peace!'。不能证明这确定会发生,因为它依赖JVM的实现方式和运行时使用的内存。如果编译器看到该实例在未来再也不道会被引用,能够选择并提早释放实例空间。

    2020-04-07 21:23:40
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载