Ich weiß, es in OpenJDK, aber ich habe es nicht in der Lage noch ist
ein gemeinsames Konzept zu finden, den OpenJDK Quellbaum aus dem Mercurial-Repository zu überprüfen und verwendet irgendeine Art von find
Befehl, nach dem zu suchen, wonach Sie suchen. In diesem Fall wird ein einfachen
$ find . -type f -exec grep "user\.home" {} \; -print
führt zu ./jdk/src/windows/native/java/lang/java_props_md.c
(und ähnlichen Dateien für andere Betriebssysteme, wie ./jdk/src/solaris/native/java/lang/java_props_md.c
), wo es eine Funktion
java_props_t *
GetJavaProperties(JNIEnv* env) { ... }
In dieser Funktion ist, werden die Systemeigenschaftswerte lesen durch die betriebssystemspezifischen APIs.
wird die Funktion im Java_java_lang_System_initProperties(JNIEnv *env, jclass cla, jobject props)
in der Quelldatei ./jdk/src/share/native/java/lang/System.c
erneut aufgerufen, die als native Methode in ./jdk/src/share/classes/java/lang/System.java
deklariert ist:
private static native Properties initProperties(Properties props);
Die endgültige Initialisierungssequenz ist ein bisschen schwierig:
java.lang.System
hat ein Statischer Initialisierer, der die native Methode registerNatives()
aufruft.
- Diese systemeigene Methode ruft
java.lang.System.initializeSystemClass()
auf (was wiederum Java ist).
initializeSystemClass()
ruft schließlich die oben erwähnte native Methode initProperties()
zum Erstellen und Initialisieren der Systemeigenschaften auf.
Dieser Code ist in der JVM. Ich schlage vor, Sie schauen auf die Quelle in der OpenJDK. –
Ich weiß, dass es in OpenJDK ist, aber ich konnte es noch nicht finden. Hotspot ist eine ziemlich große Codebase und ich kenne seine Organisation nicht gut. –