微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – JVM如何读取系统属性?

我在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等,都必须是动态的)?

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

有没有办法研究实施?

解决方法

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐