java强行删除对象_关于java:如何删除特定对象?

本问题已经有最佳答案,请猛点这里访问。

如何在垃圾收集器收集特定对象之前手动删除它?

例如,我要删除requestToken对象。 我怎样才能做到这一点 ?

请参阅:stackoverflow.com/questions/1481178/

您不删除对象。 GC将。

简短的答案是,您不能,也不需要。 GC将在需要时回收内存,而没有理由对此进行干预。

我可以想到的唯一需要尽快删除对象的情况是,对象包含出于信息安全原因需要擦除的信息。 (经典示例是在处理用户提供的密码时,您担心它可能会通过代码转储或其他方式泄漏)。在这种情况下,您需要在对象上实现一种方法,以通过覆盖来擦除对象的字段他们。但这需要仔细的设计。例如以确保您找到并清除了所有信息痕迹。

有时还需要稍微"帮助" GC以避免潜在的内存泄漏。一个典型的例子是ArrayList类,该类使用Java数组表示列表内容。数组通常大于列表的逻辑大小,并且数组的元素可以包含指向已从列表中删除的对象的指针。 ArrayList类通过将null分配给这些元素来处理此问题。

请注意,这些示例都不涉及实际删除对象。在这两种情况下,都以另一种方式解决了问题。

还值得注意的是,调用System.gc()通常不是一个好主意:

不能保证会做任何事情。

在大多数情况下,它不会做任何不会发生的事情。

在大多数情况下,效率低下。 JVM比应用程序代码处于更好的位置,以了解在人体工程学上最有效的时间来运行GC。 (阅读此内容是对人体工程学的第一性解释。)

建议在生产代码中运行GC的唯一情况是,当您尝试管理GC暂停时,并且您知道在特定时间点可以接受暂停。 (例如,当您在交互式游戏中更改关卡时...)

+1好,彻底的答案。

关于System.gc()的一个小细节:在某些情况下,确实需要在Android上调用它以回收用于图像数据等的存储。但是,当然,Android不是Java。

@HotLicks-是的 那里发生的是,Android平台依靠终结来释放与图像相关的本机资源。 但这可以说是一个应用程序错误。 应用程序应在图像上调用处置或删除或任何方法。 (就像您应该close()文件...。)

您无法删除对象,您可以尝试使其在下一个周期中有资格进行垃圾回收。最好的办法是,将对象设置为null并尝试调用System.gc();

注意:System.gc()调用只会请求JVM运行垃圾收集器,但不能强制执行。

您没有将对象设置为null,而是将引用设置为null。 并调用System.gc()通常一文不值。

@HotLicks在Java中将对象设置为null还是将引用设置为null之间有什么歧义?

"歧义性"是对象与参考之间有非常重要的区别。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值