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

[jfriends-ml 11073] Re: JavaVM でクラス はいつロードされるか?



宮本@muimi 質問者1です。


村山さん、詳しい回答ありがとうございます。


>特に理由がない限りは実行時のパフォーマンスのことを
>考えて可能な限りlazyに実装するだろうから,多くのJVMでは初回実行時
>ギリギリまでロードするのを遅らせるように実装されていると考えられる.

現実的には、
多くのJVMは、利用されるまでクラスロードを遅延しているように見えると。


>○仕様書で関係する箇所は,主に以下の通り.
>
>・"4.9.1 The Verification Process"
>http://java.sun.com/docs/books/vmspec/2nd-edition/html/ClassFile.doc.html#
>9766
>
>"Pass4:
>For efficiency reasons, certain tests that could in principle be 
>performed in Pass 3 are delayed until the first time the code for the 
>method is actually invoked. In so doing, Pass 3 of the verifier avoids 
>loading class files unless it has to."....


ロードのタイミングについては、JVM実装次第であり、何らかの理由でlazy loadを行わな
いJVMも存在する。
JVM仕様では、JVMの実装が遅延ロードすることを許可している。

ちなみに、自分が使っているVMがいつクラスをロードしたのか見るには、
簡単に見るには、-verbose:class とか使うもんですか?



>「クラス参照の決定(resolution)」
>と
>「動的なクラスのロード」
>とは,厳密には同じではない.
>
>が,事実上は
>
>「クラス参照の決定が行われる時に,そのクラス参照が表すクラスがまだロード
>  されていない時に,そのクラス,及びそのクラスの直接又は間接のスーパー
>  クラス,直接又は間接のスーパーインターフェースがロードされる」
>
>と考えて,ほぼ正しいはずです.

クラスのロードとリンクをごっちゃにしてましたが、
タイミング的にはほぼ同じであると。



>・new命令を例にした,もう少し具体的な解説.
>http://www.netgene.co.jp/java/docs/javaPressVol17.html#4

おお!Java Pressのバックナンバーを探さなくても、
Web上でJava仮想マシン入門が読めるではないですか。