gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 03:28:23 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com