确保Java对象被销毁

3
这种情况比较复杂。我有一个Web容器,可以通过RMI控制另一台机器上的应用程序。RMI服务器端有一个HashMap,其中包含Web应用程序端需要控制的用户信息。
当用户从Web应用程序端注销登录时,会向RMI服务器发出调用,告诉服务器注销该用户。然后我只需从HashMap中删除该项即可。
现在我意识到GC不会收集我在HashMap中删除的对象,因为可能有其他线程仍在使用它,而且该对象还包含一些子对象,例如用户联系人。
我真的不知道如何销毁整个对象,包括其属性和属性的属性。
2个回答

3

在IT技术中,如果你想让一个对象成为垃圾回收的对象,你必须删除所有对该对象的硬引用,这是唯一的方法。那么,在这种情况下,另一个线程是指什么呢?


在我的情况下,删除所有硬引用并不容易。其他线程意味着我使用多线程来处理用户有效载荷的某些部分,不同的有效载荷使用不同的线程。每个用户都有自己的线程。 - Shisoft
那么,你应该能够停止处理刚刚注销的用户数据的线程。让你的线程失控不是一个好主意 - 你正在跟踪所有用户的线程,对吗? - Alexander Pavlov
不是每次我都知道该怎么做,谢谢。但有没有办法获取一个对象的硬引用? - Shisoft

3
如果这是分布式垃圾回收的情况(即客户端具有对服务器上存在的对象的远程引用),则该系统通过使服务器跟踪已请求访问运行在服务器上的远程对象的客户端来工作。当进行引用时,服务器将对象标记为“脏”,而当客户端放弃引用时,则将其标记为“干净”。在这些情况下,如果客户端不定期地通知服务器仍在使用对象,则服务器应在一段时间后自动进行垃圾回收。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接