24

Tomcat は一度に複数の Web アプリケーションをロードできるため、それらの Web アプリケーションは別々に動作し、互いに干渉せず、同じ JVM で動作します。そのため、Tomcat が同じ JVM でオブジェクト スコープを処理する方法について非常に混乱しています。

たとえば、2 つの異なる Web アプリケーションの両方にシングルトン オブジェクトがあり、Tomcat はそれぞれに対して 2 つの異なるシングルトン オブジェクトを生成します。シングルトン オブジェクトは同じ JVM 内に 1 つのオブジェクトしかないといつも思っていましたが、Tomcat JVM には 2 つ以上のオブジェクトがある可能性があります。


ClassLoader に関する情報をいくつか読みました。Tomcat には、Web アプリケーションをロードするための独自の WebAppClassLoader があります。つまり、ここの Object Scope が ClassLoader であることを意味しますか、それとも間違っていますか。誰かがこれについて知っているか、Tomcat の作業メモリ レイアウトに関する情報を教えてくれますか?

4

7 に答える 7

14

Java のクラスは、その完全修飾名 それをロードしたクラスローダーによって識別されることに注意してください。Tomcat は、デプロイするコンテキスト (Web アプリケーション) ごとに個別のクラスローダーを使用するため、それらを分離したままにします。さらに、システム クラスローダーは tomcat 固有のライブラリをロードし、JVM ブートストラップ ローダーは Java コア ライブラリをロードします。

于 2013-10-24T07:20:39.167 に答える
7

シングルトンについて話す際に忘れがちなことの 1 つは、シングルトンはclassloader ごとに 1 つのインスタンスしか持てないということです。AClassLoaderはクラスの可視性を制限するため、同じ VM 内の複数の異なるクラスローダーの下に同じクラスが存在できます。これにより、さまざまなバージョンの jar を同時にロードすることができます。

この質問: Java Class Loadersには、さらに学習するための優れたリンクとリソースがあるようです。

于 2013-10-24T07:18:57.133 に答える