2016-05-03 3 views
3

JVMにデフォルトで利用可能な一連のシステムプロパティ、as described hereがあります。ホットスポットはどこから派生していますか?Javaシステムのプロパティはホストからどのように派生していますか?

user.homeのようなプロパティは、異なるOSで異なる方法で決定する必要があります。これを行うコードを探しています。

+1

このコードはJVMにあります。 OpenJDKのソースを見ることをお勧めします。 –

+0

OpenJDKに入っていますが、まだ見つけられていません。ホットスポットは...かなり大きなコードベースであり、私はその組織をよく知らない。 –

答えて

5

一般的なアプローチは、MercurialのリポジトリからOpenJDKのソースツリーをチェックアウトし、findのいくつかの並べ替えを使用することですまだ

私はそれがOpenJDKの中で知っているが、私はそれを見つけることができませんでしたあなたが探しているものの出現を探すコマンド。その場合には、単純な

$ find . -type f -exec grep "user\.home" {} \; -print 

./jdk/src/windows/native/java/lang/java_props_md.cにつながる(および./jdk/src/solaris/native/java/lang/java_props_md.cような他のオペレーティングシステムのための同様のファイル)この関数で

java_props_t * 
GetJavaProperties(JNIEnv* env) { ... } 

機能がある場合、システムプロパティの値が読み出されますオペレーティングシステム固有のAPIを使用します。

  • java.lang.Systemを有する:

    private static native Properties initProperties(Properties props); 
    

    最終的な初期化シーケンスは、トリッキーなビットである:

    機能を再び./jdk/src/share/classes/java/lang/System.javaでネイティブメソッドとして宣言されたソースファイル./jdk/src/share/native/java/lang/System.cJava_java_lang_System_initProperties(JNIEnv *env, jclass cla, jobject props)で呼び出されネイティブregisterNatives()メソッドを呼び出すstatic初期化子。

  • このネイティブメソッドは、java.lang.System.initializeSystemClass()(これはJavaです)を呼び出します。
  • initializeSystemClass()は、最後に、上記のネイティブのシステムプロパティを作成して初期化するネイティブメソッドを呼び出します。
+0

これを掘り下げるためによくできました。 +1 –

+0

あなたは正しいです、それは怠惰な質問でした。この返答をありがとう! –

関連する問題