Javaでは、プログラム間で静的なクラスメンバ が共有されていますか?
クラスはフルネームとそれをロードしたクラスローダーによって定義されます。同じクラスが同じJVMプロセス内にあり、2つのプログラムが同じクラスローダーを介してクラスをロードした場合、静的メンバーは共有されます。クラスローディングのルールは非常に重要です。
私は、すべてのプロセスはもちろん、独自の のメモリ空間を持っているので、いや、彼らは、 ないことを想像してみてください。
2つのアプリケーションを起動するために2つの別々のJVMを使用している場合は、正しいです。しかし、tomcatのようなアプリケーション/サーブレット・コンテナの場合は、同じプロセス(tomcatホスト・プロセス)で複数のアプリケーションをロードします。
しかし、全体のJVMの事物 は実際にどのように機能しますか?私が起動するすべてのJava プログラムのために別々のプロセスに個別のJVM がありますか? Java プログラムはシステム共有で実行していますか
コマンドラインで>java -cp...
と入力するたびに、新しいプロセスが作成されます。 eclipseを実行するか、fork=true
でant javaタスクを呼び出すときには、新しいプロセスも作成されていることに注意してください。
OSと JVM実装の違いはありますか? プログラムが変数を共有するようにすることはできますか(つまり、 の通常のIPCメカニズムではなく、JVMを介して直接 に直接) 特別な目的のためにもっとエキゾチックな1プロセスのJVMがありますか?
ポスターが言ったように、Terracotaのようなプロジェクトがあります。このような共有の一般的なアプローチは分散キャッシュです。
美しい答え。ありがとう:) – mac