プロが教えるわが家の防犯対策術!

staticについて調べたのですが、その内容があっているのかどうか
間違い・アドバイスなどありましたら是非伺いたいと思います。
よろしくお願い致します。
------------------------------------------------------------
 シェルから起動されるJavaでバッチ処理を行うアプリケーションを
 作成していまして、サーバマシンの複数のプロセスから起動されます。
 (つまりjavaコマンドが複数回同時に実行されます)
 1回の実行の間保持しておきたい値をstaticなクラス変数に格納しています。
 そしてそれは、1回の実行の間はずっと同じなのですが、
 プロセスごとに異なる値です 。
 この時、この1回の実行の間に保持しておきたい"static"な変数は
 次のプロセスから実行された時に書き換えられるのか?
 という疑問がでたのが始まりです。
 マルチスレッドの処理はありません。
------------------------------------------------------------
調べたところ、
■1台で2つ以上のJavaアプリケーションを実行する場合、
 それぞれのアプリケーションを個別にjavaコマンドで起動・・・
 =>javaコマンド毎に"個別のJVMが"それぞれのプロセス上で動作する。

■フィールドをstatic指定するとクラス変数となり、
 ロードされたクラスごとに"JVM上に"1つしか存在しない変数となる。

・以上の2点から、staticの変数がメモリ上で共有されるのは
 1つのJVM(1プロセス)内での話しであり、他のプロセスから
 その値を書き換えられる事はないと考えています。

 そして、1プロセス内でのマルチスレッドな処理を行っている場合、
 staticな変数の値は注意が必要だけど、
 複数プロセスでシングルスレッドな処理を行っている場合、
 (性能などの問題上staticにするかどうか良し悪しはあるとしても)
 staticな変数の値の不整合について
 考慮は不要と考えても宜しいのでしょうか?

経験が浅い為、確信が持てずにいる状況です。
宜しくお願い致します。

A 回答 (1件)

メモリは、JVMごとに割り当てられるので、


別プロセスから起動された場合のメモリは干渉しません(できません)。
    • good
    • 0
この回答へのお礼

そうですよね。
そうじゃないと開発機なんて大変なことになってしまいますよね。
専門家の方の意見が聞けてとても勉強になりました。
ありがとうございました。

お礼日時:2007/09/08 20:23

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!