我在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怎么能知道在哪里搜索这些本机文件?
有没有办法研究实施?
答案 0 :(得分:5)
您可以查看OpenJDK中的所有源代码。 JDK可以为您的IDE提供大部分源代码。
我认为你假设有更多的魔法。对于UNIX版本,file.separator可能会按照文档中的建议进行硬编码。
答案 1 :(得分:2)
查看OpenJDK源代码。例如,Linux的文件分隔符定义为like this:
inline const char* os::file_separator() {
return "/";
}