摘要:要探索JDK的核心底部源代码,您必须掌握本机用法。该文章将以“系统的默认时区”为例,以介绍如何查看本机的相应方法的源代码。
探索欲望的学生应该像我一样。查看JDK源代码时,本机方法将出现在末尾,类似于以下方法
看到这个本地人,这意味着它已经被挖到了核心。在此步骤中,尚不清楚如何获得系统的默认时区。我应该怎么办?JDK代码只能在此处遵循。
返回到OpenJDK,源代码下载方法:https://gitee.com/mirrrs/openjdk
本机是计算机函数,本机方法是Java调用非Java代码接口。该方法的实现是通过非Java语言实现的,例如C或C ++。
以**私有静态字符串getSystemtimeZoneId(StringJavahome)**为例
如图所示,在timezone.c下找到getSystemTimeZoneID方法
要点:调用不同平台相关的映射功能
在寻找Findjavatz_md方法时,发现Solaris和Windows中有两个目录。
检查这两个目录之间的区别:
因为在OpenJDK中,在Java标准库和某些工具的源代码(JDK目录)中,BSD和Linux平台相关的源代码位于Solaris Directory.originally中,Sun JDK源代码与Sun JDK源代码相关的目录从Sun JDK源代码开始。Solaris和Windows的两个目录。后来,将UNIX系列的平台相关代码放置在Solaris目录中,并且大多数代码已共享。
作者:RednaxLafx
链接:https://www.zhihu.com/question/58982441/answer/170264788
资料来源:Zhihu
简单的理解是:
在窗口系统下,JDK代码在Windows目录中编译
在UNIX系统下,JDK代码在Solaris目录中编译
该评论清楚地写了,当前时区是“时区”注册表中的
时区的设置:
该地区的选择价值从何处获取?
打开注册表:regedit->
清晰编写了Findjavatz_md()方法的注释:平台时区ID映射为Java时区ID
步:
1.使用< Java home>/lib/tzmappings.如果找不到“ TZ”变量,请转到步骤2
2. tz = getPlatformTimeZoneId();执行Linux特定映射,如果找到它,请返回时区ID,否则返回NULL
[linux] CentOS7修改系统时区时区法:
修改时区
3.比较/etc/localtime以及“/usr/share/Zoneinfo目录”中的文件,如果相同
4.返回GMT
本文分享了华为云社区的诚意,作者:xiaowuzhu。