我在一次采访中被问到这个问题:
我应该对一个对象做些什么,以使垃圾收集器无法访问它?
据我所知,垃圾收集器没有任何对象“无法访问”。然而,GC 只会收集没有更多引用指向它们的项目。
因此,为了“保护它们”,要么将它们声明为 final(常量),要么确保始终有一个指向变量的引用,例如通过在主操作循环中包含引用。
GC 将管理堆中的任何对象。您可以使对象始终可访问并且不被 GC 收集,但您不能使对象超出 GC 的范围。
使数据无法访问的唯一方法是将其从本机内存中的堆中取出,将其写入磁盘,或将其传递给另一个进程。
顺便说一句,即使在另一个进程中代理的分布式 RMI 对象也可以在不再使用时被 GC 清理。
使其包含对自身的静态引用(例如单例模式)。