4

上下文:我正在使用 netty 并定义了一个处理程序来计算和分类传入/传出流量。为此,我使用了一个如下所示的 enumMap:

EnumMap<MyEnum, AtomicLong>

但是现在我意识到只有一个线程在操纵这些值(以前我认为它不止一个,netty 似乎保证每个通道一个线程)。这意味着 AtomicLong 不是必需的。但是,由于 AtomicLong 是原始 long 的包装器,而 Long 是不可变类型,我有理由认为仅将 AtomicLong 交换为 Long 性能会降低。

对此有什么想法吗?

我可能应该做的是移动到 int 并删除整个 enumMap 的东西..

BR塞巴斯蒂安

4

3 回答 3

3

假设你只有一个线程:

如果避免创建对象,AtomicLong 可以比使用 Long 更快。

再次快速是使用long[]或不使用对象与像TObjectLongHashMap 这样的集合

于 2012-10-16T08:59:47.263 回答
1

我无法想象给定的:

为了对传入/传出流量进行计数和分类

AtomicLongLong(或long)的转换将对您的表现产生任何影响。

于 2012-10-16T09:00:14.503 回答
1

我们使用 LongAdder 来处理同样的事情;)

于 2016-02-23T04:20:49.070 回答