2

比如说,我有很多读取操作和一些写入操作,并且将放置在 map 中的对象非常“重” - 初始化此类对象会花费大量内存/时间等。

我应该如何编码以既利用并发哈希图的高性能又确保对那些缓存对象进行不必要的初始化的成本最低。

欢迎使用示例代码片段,非常感谢!谢谢!

4

3 回答 3

2

很确定番石榴正是您正在寻找的东西,请参阅MapMaker.makeComputingMap

于 2011-08-16T03:06:11.830 回答
1

ConcurrentHashMap中的代码经过高度优化——我会使用它。

如果更新很少,并发开销是最小的。如果在读取期间发生写入操作,则在制作内部状态的临时副本时会产生一些开销,但否则性能差异可以忽略不计。我会按原样使用提供的类,并且仅当您发现遇到性能问题时,然后再考虑使用其他东西。

注意初始化成本与并发性能无关,只有将其添加到映射中的操作。

于 2011-08-16T03:18:27.550 回答
0

这取决于您的要求,但您可以考虑使用一个Pool实例来减少实例化计数。如果您当前正在从地图中转储项目以垃圾收集它们,这将提高您的性能,因此您可以将它们放回池中并稍后重新使用它们,而不是 GC。

于 2011-08-16T03:00:17.677 回答