|
4
|
| chaotic3quilibrium · 技术社区 · 15 年前 |
|
|
1
5
据我所知:
Guava
的
|
|
|
2
5
当您将一个不可修改的映射包装到另一个映射时,不必担心性能问题。看一看
|
|
3
2
我对(C)的看法是,hotspot编译器应该非常擅长内联只返回另一个方法调用结果的小方法。但我怀疑它是否能看穿几个级别的间接寻址,例如一个HashMap包在几个不可修改的映射中。如果你知道你的库有时会返回不可修改的地图,我也不认为这是过早的优化。为什么不为Collections.unmodifiableMap创建自己的包装器(未经测试,我刚刚注意到一个简单的instanceof不会工作,因为Collections中的Impl是私有的):
|
|
|
4
2
由于考虑到多个类装入器和通过RMI的序列化,我真正喜欢的一个解决方案(Jorn Horstmann的类引用比较)有问题。然而,当我采用他的方法并将其与类名方法的修改(由Eugene Kuleshov推荐)相结合时,我想我已经接近了能够在多线程分布式处理环境中帮助我的解决方案。有点像这样:
这仍然具有参考比较的所有优点 假设 和 类名的字符串已被正确地存储。它在做到这一点的同时,礼貌地保持封装(避免我的代码直接引用类名)。但是,如果这两个假设不成立,那么计算将返回到标准字符串比较,如果类名在库的不同版本之间没有变化(这似乎是一个很低的概率),则标准字符串比较将起作用。
|
|
|
5
0
A) 没有 B) 没有 C) 可能吧,但我希望这取决于JVM的实现。 所讨论的decorator非常轻量级,是否有某种特定的原因导致只进行另一个方法调用的额外方法调用会在您的环境中导致一些性能问题?这在任何标准应用程序中都不应该是一个问题,所以除非您有一些真正特殊的应用程序/环境(cpu密集型、实时、移动设备…),否则应该不是问题。 |
|
|
6
0
一般来说,第一条规则是除非确实有必要,否则不要优化它。基本上,您需要从应用程序中收集一些性能数据,以查看包装的收集是否会导致性能下降。
|