2016-05-03 14 views
3

Es gibt eine Reihe von Systemeigenschaften, die standardmäßig in einer JVM, as described here, verfügbar sind. Woher kommen sie im Hotspot?Wie werden Java-Systemeigenschaften vom Host abgeleitet?

Eigenschaften wie user.home müssen auf verschiedenen Betriebssystemen unterschiedlich ermittelt werden, und ich bin auf der Suche nach dem Code, der dies tut.

+1

Dieser Code ist in der JVM. Ich schlage vor, Sie schauen auf die Quelle in der OpenJDK. –

+0

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. –

Antwort

5

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.
+0

Gut gemacht, um darin zu graben. +1 –

+0

Sie haben Recht, das war eine faule Frage. Danke für diese Antwort! –