我想知道是否有人可以告诉我什么时候 Java Class
对象被垃圾收集。我的用例是一个缓存 ( 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 类的新实例,而只是一个引用到现有的。
一旦您的 Map
超出范围,整个 Map
将符合垃圾回收条件。
关于java - Class 对象什么时候被垃圾回收?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7298615/