java - Class 对象什么时候被垃圾回收?

标签 java class caching garbage-collection weak

我想知道是否有人可以告诉我什么时候 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/

相关文章:

html - 从网络文件共享提供文件时的浏览器缓存

java - 通过 JAVA 访问 C++ 原生 DLL(带命名空间)

class - 我如何在 Wordpress 类中过滤( Hook )函数?

c# - .Net 缓存过期

php - 你如何组织一个类中的方法和属性?

Java 好奇号 : Using a Float or Double for Costs in a Class

java - 将 JCS 日志级别设置为错误 - log4j

java - 在多服务器 Adob​​e Coldfusion 9 中添加特定实例的 ColdFusion 类路径

java - Eclipse 在调试期间自行更改变量

java - 你如何将 firebird 数据库连接到 android?