JVM如何读取系统属性?

Mar*_*ler 3 java operating-system jvm native properties

我在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);
Run Code Online (Sandbox Code Playgroud)

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

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

有没有办法研究实施?

Pet*_*rey 5

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

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