Java 7中的ClassValue

Jör*_*ann 37 java java-7

在浏览Java 7 API文档时,我偶然发现了新类java.lang.ClassValue,其中包含以下相当少的文档:

懒惰地将计算值与(可能)每种类型相关联.例如,如果动态语言需要为消息发送调用站点遇到的每个类构造消息调度表,则它可以使用a ClassValue来缓存执行消息快速发送所需的信息,以便遇到每个类.

任何人都可以更好地解释这个类解决了什么问题,也许还有一些示例代码或已经使用过该类的开源项目?

更新:我仍然对使用这个新类的一些实际源代码或示例感兴趣.

我还在mlvm-dev邮件列表上找到了关于一些实现改进的邮件.显然,从使用WeakHashMap变为java.lang.Class上的新私有字段,使其更具可伸缩性.

Sco*_*rey 11

对这个类的目的的最好解释是它解决了Java Bug 6389107

有许多用例Map<Class<?>, T>由于某种原因人们想要基本上有一个,但这会导致各种麻烦,因为Class在Map之前,对象将不能用GC. WeakHashMap<Class<?>, T>并不是因为非常频繁地T引用了这个类.

上面的错误进入更详细的解释,并包含面临此问题的示例项目/代码.

ClassValue就是这个问题的答案.一种线程安全的类加载器加载/卸载安全方式,用于将数据与类关联.


Sur*_*ran 6

其目的是允许将运行时信息添加到任意目标类(引用).

我认为它更多地针对动态语言程序员.我不确定它对普通应用程序开发人员有什么用处.

最初,课程就在课程中java.dyn.这个bug表明它正在转向java.lang.