Java系统属性是如何从主机派生的?

时间:2016-05-03 12:10:54

标签: java jvm environment-variables jvm-hotspot

默认情况下,JVM中有一组系统属性as described here。热点在哪里派生出来?

user.home之类的属性必须在不同的操作系统上以不同的方式确定,我正在寻找执行此操作的代码。

1 个答案:

答案 0 :(得分:5)

  

我知道它在OpenJDK中,但我还没有找到它

一种常见的方法是从mercurial存储库中检出OpenJDK源代码树,并使用某种using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class Student_Result : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { Label1.Text = Request.QueryString["Score"]; Label2.Text = Request.QueryString["AttemptedQues"]; Label3.Text = Request.QueryString["CorrectAns"]; } } 命令来查找您要查找的内容。在那种情况下,一个简单的

find

导致$ 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

在此函数中,系统属性值通过特定于操作系统的API读取。

该函数在源文件java_props_t * GetJavaProperties(JNIEnv* env) { ... } 中的Java_java_lang_System_initProperties(JNIEnv *env, jclass cla, jobject props)中调用,该文件再次在./jdk/src/share/native/java/lang/System.c中声明为本机方法:

./jdk/src/share/classes/java/lang/System.java

最后的初始化序列有点棘手:

  • private static native Properties initProperties(Properties props); 有一个静态初始值设定项,用于调用本机java.lang.System方法。
  • 此本机方法调用registerNatives()(再次是Java)。
  • java.lang.System.initializeSystemClass()最后调用上面提到的本地initializeSystemClass()方法来创建和初始化系统属性。