在日常开发中,我们都知道,Java的记忆清洁是通过垃圾回收器执行的,那么如何将其从无用的物体中清除?
Java语言的内存自动称为垃圾收集机制,称为GC。垃圾回收机制是指JVM使用的内存来释放不再使用的人。
使用后需要清洁Java对象。对象清洁是对象所占据的内存。当创建对象时,用户必须使用新操作员将内存分配为对象。删除对象后,系统将自动恢复不需要其他治疗的内存。这也是Java语言的特征,这使程序员更容易管理内存。
通常,一个物体用作垃圾回收。
1)对象的引用超出其范围。
2)将对象分配给NULL
在Java对象类中,它还提供了受保护类型的最终确定方法,因此任何Java类都可以涵盖此方法,以及该方法中释放对象占据的相关资源。
然后问题是,最终确定()是什么样的幽灵?由于将称为对象的方法,因此所有类别都将具有此方法(毕竟,所有类别都将被回收),因此我们自然会想到JavaObject的root类。进去?
最后一行确实找到了。这是一种实现为空的方法。由于它是受保护的
在这里,我们重写了finalize()方法。如果一个人在被摧毁之前没有花费,那将无法打印此人,否则此人将成功。以下是我们在Main()中的代码
运行结果一无所有!运行后,不仅U1指向,甚至没有任何引用的新用户(100);它没有被回收。发生了什么?
让我们看一下爪哇的思考如何解释
Java并不总是被垃圾回收,这意味着该对象可能不会被回收。如果程序结束了,并且垃圾回收尚未发布您创建的空间,则资源将随着程序的退出而返回,将返回资源,返回操作系统。
如果我们想查看效果,我们可以使用以下方法:
system.gc();它将迫使系统垃圾回收器工作,并且操作效果将出现错误
解释新用户(100);创建的对象是回收的。
注意:调用system.gc()或runtime.gc()的方法不保证必须执行回收操作。它只是增加了Java垃圾回收商尽快恢复垃圾的可能性。
知识补充:
在Java虚拟机的桩区域中,每个对象可能是以下三个状态之一。1)可以触摸:当创建对象时,只要程序中有一个参考变量引用,就可以始终处于触发状态。2)复活状态:当程序不再具有任何参考变量引用对象时,对象进入复活状态。在此状态下,垃圾恢复设备将准备释放其占据的内存。在发布之前,它将称其为“可以在复活状态”中的其他finalize()方法。Touch状态。3)请勿触摸状态:当Java虚拟机执行所有可以复活的finalize()方法时如果这些方法未转移到状态,则垃圾恢复设备将真正恢复其占用的内存。