JVM如何读取系统属性?

时间:2012-12-07 18:57:30

标签: java properties operating-system jvm native

我在System课程中找到了这个,但我想知道这是如何实现的。

     /**
     * System properties. The following properties are guaranteed to be defined:
     * <dl>
     * <dt>java.version         <dd>Java version number
     * <dt>java.vendor          <dd>Java vendor specific string
     * <dt>java.vendor.url      <dd>Java vendor URL
     * <dt>java.home            <dd>Java installation directory
     * <dt>java.class.version   <dd>Java class version number
     * <dt>java.class.path      <dd>Java classpath
     * <dt>os.name              <dd>Operating System Name
     * <dt>os.arch              <dd>Operating System Architecture
     * <dt>os.version           <dd>Operating System Version
     * <dt>file.separator       <dd>File separator ("/" on Unix)
     * <dt>path.separator       <dd>Path separator (":" on Unix)
     * <dt>line.separator       <dd>Line separator ("\n" on Unix)
     * <dt>user.name            <dd>User account name
     * <dt>user.home            <dd>User home directory
     * <dt>user.dir             <dd>User's current working directory
     * </dl>
     */

    private static Properties props;
    private static native Properties initProperties(Properties props);

由于它是一种原生方法,我假设有一个C-File,可以完成所有的魔术。 是否有一个特定于操作系统的文件,它通过C中的getenv()加载变量,或者这是某种特定平台的硬编码(无论是os.name,os.version等,都必须是动态的)?

如果操作系统是修改后的Linux内核,其中a为行分隔符或<foo>为路径分隔符,该怎么办?如果在知道路径分隔符之前将JVM存储在..<foo>..<foo>native<foo>amd_xyz下面,JVM怎么能知道在哪里搜索这些本机文件?

有没有办法研究实施?

2 个答案:

答案 0 :(得分:5)

您可以查看OpenJDK中的所有源代码。 JDK可以为您的IDE提供大部分源代码。

我认为你假设有更多的魔法。对于UNIX版本,file.separator可能会按照文档中的建议进行硬编码。

答案 1 :(得分:2)

查看OpenJDK源代码。例如,Linux的文件分隔符定义为like this

inline const char* os::file_separator() {
  return "/"; 
}