java – Class对象何时被垃圾收集?

我想知道是否有人可以告诉我什么时候
Java类对象被垃圾收集.我的用例是一个缓存(Map< Class<?>,Class<?> []>),它保存了对象的类层次结构.

例如:

String.class的(短)层次结构将是(降序):String.class – > Object.class.此类型的有效缓存条目为[KEY:String.class,VALUE:{String.class,Object.class}].

我猜String.class是一个不好的例子,因为String.class应该被垃圾收集….

我需要这个缓存来处理我正在进行的序列化项目.在编写对象时,我的系统需要此对象的层次结构来选择正确的“编解码器(序列化器)”.收集每个对象的层次结构会导致一些不必要的开销.但后来我关于内存泄漏.可能是垃圾收集(我不知道)的类对象可能在我的缓存中使用强引用时不起作用.

你认为WeakHashMap就够了吗?或者我必须使用以下内容:

Map<WeakReference<Class<?>>, WeakReference<Class<?>>[]> ?

你怎么看待这个问题?

最佳答案 没有深入了解Java中的类垃圾收集的细节,我认为你根本不需要担心:不需要收集类对象本身来防止内存泄漏来实现你想要的.毕竟,java.lang.String只会有一个Class实例.因此,如果将String.class的引用放入Map(或任何其他数据结构)中,则不会创建String类的新实例,而只是对现有实例的引用.

一旦您的地图超出范围,整个地图将有资格进行垃圾收集.

点赞