sun.misc.Unsafeについての説明は面倒なのでしません(というか、詳しくないのでできません)
versionはこれ書いてる時点で最新のakka2.3.5です。grepして(importやコメント除いて)半手動で集計したら以下のような感じになりました。49箇所でした。(半手動なので微妙に間違ってたらごめんなさい)
- objectFieldOffset 15
- getObjectVolatile 11
- putOrderedObject 3
- compareAndSwapObject 9
- putObjectVolatile 2
- compareAndSwapInt 2
- compareAndSwapLong 2
- getIntVolatile 2
- getLongVolatile 2
- putIntVolatile 1
https://gist.github.com/xuwei-k/828be054f293239147a4
大体は、compareAndSwapですね?(objectFieldOffsetなどは、compareAndSwapするために必要?)これってつまりAtomicReferenceやAtomicIntegerなどのものでも代用は可能だけど、パフォーマンスのためにsun.misc.UnsafeでCASしているということでしょうか?
この前こんなtweetしたら
以下のようにC++のマサカリが飛んできて、「おぉ・・・」となったわけですが
まぁ
sun.misc.Unsafeは確かに魔域で、それを使っているというだけでは何をしているのか予想できない。より具体的にUnsafeのどのメソッド呼んでるかによって、邪悪さが随分ちがうのですよねぇ
などのコメントも貰ったので、だれか識者の人、上のメソッド一覧みて
「Unsafeの中でもあまり使われない、邪悪なものつかってる」
「この程度なら、よくあるUnsafeの使い方だなー」
など、なにか感想あったらください