JVMにデフォルトで利用可能な一連のシステムプロパティ、as described hereがあります。ホットスポットはどこから派生していますか?Javaシステムのプロパティはホストからどのように派生していますか?
user.home
のようなプロパティは、異なるOSで異なる方法で決定する必要があります。これを行うコードを探しています。
JVMにデフォルトで利用可能な一連のシステムプロパティ、as described hereがあります。ホットスポットはどこから派生していますか?Javaシステムのプロパティはホストからどのように派生していますか?
user.home
のようなプロパティは、異なるOSで異なる方法で決定する必要があります。これを行うコードを探しています。
一般的なアプローチは、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.c
にJava_java_lang_System_initProperties(JNIEnv *env, jclass cla, jobject props)
で呼び出されネイティブregisterNatives()
メソッドを呼び出すstatic初期化子。
java.lang.System.initializeSystemClass()
(これはJavaです)を呼び出します。initializeSystemClass()
は、最後に、上記のネイティブのシステムプロパティを作成して初期化するネイティブメソッドを呼び出します。これを掘り下げるためによくできました。 +1 –
あなたは正しいです、それは怠惰な質問でした。この返答をありがとう! –
このコードはJVMにあります。 OpenJDKのソースを見ることをお勧めします。 –
OpenJDKに入っていますが、まだ見つけられていません。ホットスポットは...かなり大きなコードベースであり、私はその組織をよく知らない。 –