[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends-ml 1634] Re: volatile のはなし Re: Java スレッドプログラ ミングを読む会第 6 回の議事録



こんばんは。武川です。

From: Toru TAKAHASHI <torutk@xxxxxxxxxxx>
Subject: [jfriends-ml 1633] Re: volatile のはなし Re: Java スレッドプログラミングを読む会第 6 回の議事録
Date: Tue, 8 May 2001 01:29:38 +0900

> 順序としては*1が先なので、本来は*1で代入した値を*2で参照したいのだが
> メモリオペレーションは上記図のようになった場合、*2で参照できるのは
> まだ*1の代入が反映される前の値となってしまう。
> (変数Vは、実際には作業メモリ上の作業コピーおよびメインメモリ上の
> マスターコピーから成ります)

丁寧な解説ありがとうございます。

僕的には、各スレッドがワーキング用のメモリ領域を持っているという点が
意外でした。

最初、バイトコードレベルの命令で、作業メモリへの読み込みと
書き込みがあるのかと思っていたのですが、ありませんでした。
これは、JVM内部でこのような処理を行なうという理解を
したのですが、よいのですよね?

また、作業メモリを持つ理由というのは何なのでしょうか?
マルチプロセッサ環境において、メモリアクセスの競合
を防ぐことを考えているのでしょうか?
それとも、シングルプロセッサ環境で作業メモリに値を
集約して、キャッシュのヒット率を上げて性能向上を狙う
という意図があるのでしょうか?

うーん。どちらかと言えば、前者のような気がするのですが、
よくわかりません。

#マルチとかシングル以前にプロセッサ自体よくわかってないからかな?

ちなみに
http://www.y-adagio.com/public/standards/tr_javalang/17.doc.htm#28287
を見る限りでは、17章中に、

> 各スレッドは,作業メモリをもち,その中に,すべてのスレッドが
> 共有する主メモリ上の変数値の複製を保持してもよい。

という記述があるので、作業メモリは必須ではないようです。
性能上のなんらかの理由があるのだと予想をしています。

p.s.

親愛なる 秋元さんと高橋(徹)さんへ
AspectJのほうは、全然いけてない状況です。
チュートリアルのpdfを読んでいるのですが、30/100ページという
ていたらくです。あと、予定では6月に1.0がリリースされる
(今は0.8β3でした)とのことだったので、6月にしたほうがよいの
かもしれません。
#と逃げの一手を打ってみたりして。

ではでは。
--
takekawa@xxxxxxxxxxxxxx