Java 如何使对象不被垃圾收集?

Java 如何使对象不被垃圾收集?,java,garbage-collection,Java,Garbage Collection,可能重复: 我在一次采访中被问到这个问题: 我应该如何处理对象以使垃圾收集器无法访问它 使其包含对自身的静态引用(例如单例模式)。据我所知,垃圾收集器不会“无法访问”任何对象。但是,GC将只收集没有更多指向它们的引用的项 因此,为了“保护它们”,要么将它们声明为final(常量),要么确保始终有一个指向变量的引用,例如通过将引用包括在主操作循环中。GC将管理堆中的任何对象。您可以使一个对象始终可访问,并且不被GC收集,但是您不能使一个对象超出GC的范围 使数据不可访问的唯一方法是将其从本机内

可能重复:

我在一次采访中被问到这个问题:

我应该如何处理对象以使垃圾收集器无法访问它


使其包含对自身的静态引用(例如单例模式)。

据我所知,垃圾收集器不会“无法访问”任何对象。但是,GC将只收集没有更多指向它们的引用的项


因此,为了“保护它们”,要么将它们声明为final(常量),要么确保始终有一个指向变量的引用,例如通过将引用包括在主操作循环中。

GC将管理堆中的任何对象。您可以使一个对象始终可访问,并且不被GC收集,但是您不能使一个对象超出GC的范围

使数据不可访问的唯一方法是将其从本机内存的堆中移出,将其写入磁盘,或将其传递给另一个进程


顺便说一句,即使是在另一个进程中代理的分布式RMI对象在不再使用时也可以由GC清理。

这是误导性的:singleton模式涉及引用该对象的类变量。对象引用本身是不相关的,它仍然混淆了“对象”和“类”的概念。对象不包含静态引用。类也可能被卸载,在这种情况下,其静态字段内容可能会得到GCed。甚至不存在“GC无法访问”的概念,“无法访问对象”的概念意味着它有资格进行垃圾收集。换句话说,这听起来有意混淆了另一个蹩脚的面试问题(TM);方法,并读取它(如果它存在于私有构造函数中)。@MeNoMore这是如何防止GC的?问题不是关于保存状态,而是关于防止gc,不是吗?@Marko说得对,没有用例的问题是荒谬的。如果要防止对象被GCed,只需保留对它的引用;否则,解决方案应该从你不能这样做的原因出发。(这可能是指一个工作场所,如果他们的面试问题没有前缀“这是一个面试问题”,那么他们的面试问题就会结束。)