java.lang.Instrumentation.getAllLoadedClasses()というJavaエージェントクラスを作成しました。クラスの配列を取得し、それを使って反復処理を行い、フルネームを出力します。Javaのクラスが自動的にロードされるのはなぜですか?
が、私はこのエージェントを実行するには、このコマンドを使用:
java -javaagent:<agent_jar> -jar <sample_jar>
<agent_jar>
は私のエージェントクラスが含まれている、と私は渡す必要があるため<sample_jar>
がちょうど(空のmainメソッドを持つクラスが含まれてい一部クラス/ jaからjava
コマンドへ)
基本的に、JVMによってロードされるすべてのデフォルトクラスが表示されます。名前に「String」と「Object」を含むクラス名のスニペットが表示されます。
(出力形式:Class.getName() - Class.getTypeName())
java.util.Objects - java.util.Objects
[Ljava.lang.String; - java.lang.String[]
java.lang.String$CaseInsensitiveComparator - java.lang.String$CaseInsensitiveComparator
[Ljava.io.ObjectStreamField; - java.io.ObjectStreamField[]
java.io.ObjectStreamField - java.io.ObjectStreamField
[Ljava.lang.Object; - java.lang.Object[]
java.lang.StringBuilder - java.lang.StringBuilder
java.lang.StringBuffer - java.lang.StringBuffer
java.lang.AbstractStringBuilder - java.lang.AbstractStringBuilder
java.lang.reflect.AccessibleObject - java.lang.reflect.AccessibleObject
java.lang.String - java.lang.String
java.lang.Object - java.lang.Object
なぜ多くのクラスの配列エントリは、例えばあります。オブジェクトとオブジェクト[]?
リファレンス「http://stackoverflow.com/questions/3442090/java-what-is-this-ljava-lang-object – Guy
あなたの 'main'が空であるという理由だけで、JVMが*何もしない*。クラスをロードしてメインメソッドを実行できるようにするには、明らかにいくつかのものをロードする必要があります。 – Tom