読書会(JAVA CONCURRENCY IN PRACTICE)第7回議事録
[ 戻る ]
日時:1/20(土)10:00〜17:00
場所:高津区市民会館 第6会議室
出席者:高橋(智)、岩室、小松、根本、大石、村山、高橋(徹)、吉本、小棚木、岡沢、鈴木(記)
P253 [宿題]perfbarを使用した感想を必ずレポートしてください。
JavaではCPU使用率を取得することはできない。
複数CPUがある場合は全CPU使用率の平均値だけではなく、個別のCPU使用率も取得したほうがよい。CPU使用率に偏りが生じている場合がある。
OSではCPU使用率を測定するためにアイドル・プロセスを設けている場合がある。(例:WindowsのSystem Idele Process)
CPUのxx-wayのカウントのしかたはメーカーによって違う?
p256 ConcurrentHashMapは完全な同期化はしないので注意。
p259 アダプティブ・ロック…コンテキスト・スイッチはせず、スピンロックしてちょっと待つ。マルチプロセッサーが前提。短い競合で済ませることができる場合が多い。
JVMの同期化コストは軽くなってきている。
p260 JVM TI(Tool Interface)はデバッガーとプロファイラーが合わさったもの。
Java6でコンパイラーAPIが変わった?
ロック省略の効果は測定できないのではないか。
・コンパイル時に既に無駄なロックははずされている。
・競合をおこさないとわからない。
ただし、HotSpotが吐き出したBinaryコードは見ることができる。
[宿題]HotSpotコンパイラーが作成したNativeコードで無駄なロックが解消されているか検証する。
p262 排他的ロックではない別の調停の仕組みとは?
ヌルロック、Reader-Writerロック、Sharedロック、フラグ・ファイルなど。
p273 8-way、16スレッドまでConcurrenthashMap、ConcurrentSkipListMapはパフォーマンスが向上している。
→これはテストを実施したマシンが8-wayだからなのではないか?
→テストを実施したのが2-wayだったらどうなるのか。またWindowsやLinuxで実行した場合は?
p282 通常InterruptedExceptionで終了するようになっている。joinで正常終了の場合もテスト
p283 JMXだとJava5からメモリー使用率を取得できる。RuntimeクラスのfreeMemory()でJVM上の空きメモリーサイズを取得できる。
totalMemory()もある。
System.gc()を使用しても厳密にはガベージ・コレクションを強制実行することはできない。
p289のList12-9について
MAX_SIZEに至らない間は処理待ち
i<20の20は10×2の意味か?
exec.shutdownNowはfinally節に入れるべき。
p290のList12-10について
synchronizedしていても誰かが別で直接fromやtoのsetBalance()メソッドを実行している可能性がある。
乱数でyieldする→いろいろなスケジューリング条件を試すため?
p293のFig12-1について
LinkedとArrayでメモリー使用方法が違う。
スレッド数=1のときが一番スループットがよい。→Bufferがいっぱいにならなければ処理がブロックされない。
Bufferサイズが1だとブロックしているため、スレッド数にかかわらずスループットが同じ。
スループットとは?1スレッドで処理したときの一定時間にできる仕事量?
サイズ1、スレッド1のときの実行時間を1にした逆数?とにかく何か基準はあるはず。
-verbose:compileオプションも存在し、コンパイル回数の制限もできる。
p302 System.nanoTime()…実行にマイクロ秒程度しかかからない。相対時間を使用。
MySQLがOSによって時間関連のメソッドで処理時間が違う。速度と時間精度のトレードオフがある。
絶対時間のほうが処理が重くなる。
System.currentTimeMillis()は絶対時間を使用するので処理が重い。
mutableなオブジェクトの場合、hashCode()が変わる可能性がある。
原書のp270のsome derived objectが和訳ではderived部分が訳されていない。
[宿題]スレッド争奪監視機能(thread contention monitoring)のjava.lang.management.ThreadInfoの使い方を教えてください。
[ 戻る ]