4

コンテキスト: 私は netty を使用しており、着信/発信トラフィックをカウントして分類するためにハンドラーを定義しました。このために、次のような enumMap を使用しました。

EnumMap<MyEnum, AtomicLong>

ただし、値を操作しているスレッドは 1 つしかないことに気付きました (以前は複数だと思っていましたが、netty はチャネルごとに 1 つのスレッドを保証しているようです)。これは、AtomicLong が不要であることを意味します。ただし、AtomicLong はプリミティブな long のラッパーであり、Long は不変型であるため、AtomicLong を Long に交換するだけではパフォーマンスが低下すると考える理由があります。

これに関するアイデアはありますか?

おそらく私がすべきことは、intに移動してenumMap全体を削除することです..

BR セバスチャン

4

3 に答える 3

3

スレッドが 1 つしかない場合:

AtomicLong は、オブジェクトの作成を回避する場合、Long を使用するよりも高速になる可能性があります。

ここでも高速なのは、 TObjectLongHashMaplong[]のようなコレクションでオブジェクトを使用するか、まったく使用しないことです。

于 2012-10-16T08:59:47.263 に答える
1

私はそれを想像することはできません:

着信/発信トラフィックをカウントして分類するため

AtomicLongからLong(または) への変換はlong、パフォーマンスにまったく影響を与えません。

于 2012-10-16T09:00:14.503 に答える
1

同じ問題でLongAdderを使用します;)

于 2016-02-23T04:20:49.070 に答える