【发布时间】:2013-06-28 16:21:10
【问题描述】:
如果您查看 Sun 实现 Class.getSimpleName() 的源代码,您会注意到每次调用它时似乎都会返回一个新的 String 实例。但是,Class 类中的许多其他功能都被缓存了。
由于简单的名称计算似乎并不容易,并且 JavaDoc 中没有说明它每次都必须返回一个新实例,因此它应该是缓存的一个很好的候选者。我想知道为什么没有缓存有任何设计原因?
我之所以这么问,是因为许多框架一直都使用简单的名称,而这很容易缓存。
【问题讨论】:
-
缓存它会增加每个类所持有的内存,从而获得值得怀疑的性能提升。
-
如果您愿意,您可以随时使用
AspectJ添加自己的缓存。 -
@JBNizet 但是对于任何非数组类型,操作是一个潜在的 intern'ed 字符串的子字符串,不需要太多额外的内存。
-
似乎这是要问 Sun 的问题,而不是 SO。
-
它被缓存,至少在Java 12中。请参阅
Class.java的OpenJDK源代码并搜索private ReflectionData<T> reflectionData()调用的方法getSimpleName方法。
标签: java