2

クラスが JVM にロードされるのはいつですか? サーバーの起動時またはクラスの参照があるときにロードされますか? 私の仮定では、jboss のようなサーバーが起動するとすべてのクラスがロードされますが、遅延ロードと呼ばれるものがあります。

また、ロードとは実際にはどういう意味ですか?この .class がすべてのメソッド、インスタンスを含む変数、静的変数メソッドとともに JVM メモリにあり、実行可能であることを意味しますか。ClassLoader は、ロードする必要がある Java クラスのバイトコードを見つけ、バイトコードを読み取り、特定のクラスで使用されている他のクラスの参照をチェックし、java.lang.Class クラスのインスタンスを作成することによってそれらもロードすることを知っています。これにより、JVM がクラスを実行できるようになります。

メソッドもクラスとともに JVM にロードされますか? 私の仮定は、メソッドはスレッドのスタック メモリにのみあるということです。メソッドメモリとは?ヒープまたはスタックの一部ですか?

インスタンスメソッドではなく、クラスのロードとともに静的メソッドのみがロードされますか? クラスがロードされ、すべての静的変数が初期化されると、静的ブロックが実行されることを私は知っています。

これらの疑問が解消された場合は、事前に感謝します。

4

1 に答える 1

2

これらは JVM に関するほとんど基本的な質問であり、Google が確実に回答を提供してくれるでしょう。

いくつかの質問 (特に実際のロード プロセスに関する質問) については、次の例を参照してください: http://www.securingjava.com/chapter-two/chapter-two-7.html

簡単に言えば、最初は基本的な (そして信頼できる) クラスだけが JVM によってロードされます。次に、他のクラスローダ (ブートストラップ クラスローダなど) が必要に応じて作成され、さらにいくつかのクラスがロードされます。クラスを正常にロードするには、そのクラスが依存するすべてのクラスをロードする必要があります。

ロードされたクラスは、さまざまな形式 (JVM 固有) でメモリに格納されますが、クラス オブジェクトは常に公開されます。クラス内のすべて (メソッド、変数など) がロードされます。これは、クラスもコンパイルされるという意味ではありません (コンパイルは、後でメソッドを実行する必要があるときに行われます)。

メソッド変数の割り当ては、スタック (プリミティブの場合) またはヒープで行われます。

静的変数の初期化と静的ブロックの実行は、クラスがロードされた直後、そのインスタンスが作成される前に行われます。

于 2012-06-08T15:25:41.710 に答える