2024年最全要探索JDK的核心底层源码,那必须掌握native用法(1),史上超级详细

最后

我想问下大家当初选择做程序员的初衷是什么?有思考过这个问题吗?高薪?热爱?

既然入了这行就应该知道,这个行业是靠本事吃饭的,你想要拿高薪没有问题,请好好磨练自己的技术,不要抱怨。有的人通过培训可以让自己成长,有些人可以通过自律强大的自学能力成长,如果你两者都不占,还怎么拿高薪?

架构师是很多程序员的职业目标,一个好的架构师是不愁所谓的35岁高龄门槛的,到了那个时候,照样大把的企业挖他。为什么很多人想进阿里巴巴,无非不是福利待遇好以及优质的人脉资源,这对个人职业发展是有非常大帮助的。

如果你也想成为一名好的架构师,那或许这份Java核心架构笔记你需要阅读阅读,希望能够对你的职业发展有所帮助。

中高级开发必知必会:

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

去查找findJavaTZ_md方法时,发现存在分别在solaris和windows两个目录下。

image-20210706234905448

查了下这两个目录的差别:

因为OpenJDK里,Java标准库和部分工具的源码repo(jdk目录)里,BSD和Linux的平台相关源码都是在solaris目录里的。

原本Sun JDK的源码里平台相关的目录就是从solaris和windows这两个目录开始的,后来Unix系的平台相关代码全都放在solaris目录下了,共用大部分代码。

作者:RednaxelaFX

链接:https://www.zhihu.com/question/58982441/answer/170264788

来源:知乎

简单的理解就是:

window系统下,使用windows目录下编译的JDK代码

unix系的平台下,使用solaris目录下编译的JDK代码

了解不同系统下findJavaTZ_md方法执行

=============================================================================================

windows系统


/*

  • Detects the platform time zone which maps to a Java time zone ID.

*/

char *findJavaTZ_md(const char *java_home_dir, const char *country)

{

char winZoneName[MAX_ZONE_CHAR];

char winMapID[MAX_MAPID_LENGTH];

char *std_timezone = NULL;

int result;

winMapID[0] = 0;

result = getWinTimeZone(winZoneName, winMapID);

if (result != VALUE_UNKNOWN) {

if (result == VALUE_GMTOFFSET) {

std_timezone = _strdup(winZoneName);

} else {

std_timezone = matchJavaTZ(java_home_dir, result,

winZoneName, winMapID, country);

}

}

return std_timezone;

}

注释写得很清楚,获取“Time Zones”注册表中的当前时区

/*

  • Gets the current time zone entry in the “Time Zones” registry.

*/

static int getWinTimeZone(char *winZoneName, char *winMapID)

{

}

时区的设置方式:

image-202107086550950

那时区上的选择值是从哪取到的,上面有说了,是在注册表中取值

打开注册表 :Regedit–>

计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\

unix系的平台


findJavaTz_md()方法的注释上写得很清楚了:将平台时区ID映射为Java时区ID

/*

  • findJavaTZ_md() maps platform time zone ID to Java time zone ID

  • using <java_home>/lib/tzmappings. If the TZ value is not found, it

  • trys some libc implementation dependent mappings. If it still

  • can’t map to a Java time zone ID, it falls back to the GMT+/-hh:mm

  • form. `country’, which can be null, is not used for UNIX platforms.

*/

/ARGSUSED1/

char *

findJavaTZ_md(const char *java_home_dir, const char *country)

{

char *tz;

char *javatz = NULL;

char *freetz = NULL;

tz = getenv(“TZ”);

#ifdef linux

if (tz == NULL) {

#else

#ifdef solaris

if (tz == NULL || *tz == ‘\0’) {

#endif

#endif

tz = getPlatformTimeZoneID();

freetz = tz;

}

/*

  • Remove any preceding ‘:’

*/

if (tz != NULL && *tz == ‘:’) {

tz++;

}

#ifdef solaris

if (strcmp(tz, “localtime”) == 0) {

tz = getSolarisDefaultZoneID();

freetz = tz;

}

#endif

if (tz != NULL) {

#ifdef linux

/*

  • Ignore “posix/” prefix.

*/

if (strncmp(tz, “posix/”, 6) == 0) {

tz += 6;

}

#endif

javatz = strdup(tz);

if (freetz != NULL) {

free((void *) freetz);

}

}

return javatz;

}

步骤:

1、使用< Java home>/lib/tzmappings,。如果没有找到"TZ"变量,就进行第2步

2、 tz = getPlatformTimeZoneID(); 执行Linux特定的映射,如果找到,返回一个时区ID,否则返回null

【Linux】Centos7修改系统时区timezone方式:

timedatectl

最后

小编精心为大家准备了一手资料

以上Java高级架构资料、源码、笔记、视频。Dubbo、Redis、设计模式、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术

【附】架构书籍

  1. BAT面试的20道高频数据库问题解析
  2. Java面试宝典
  3. Netty实战
  4. 算法

BATJ面试要点及Java架构师进阶资料

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

解析
2. Java面试宝典
3. Netty实战
4. 算法

[外链图片转存中…(img-7eRmS3CN-1715120320776)]

BATJ面试要点及Java架构师进阶资料

[外链图片转存中…(img-tnyPVi98-1715120320777)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 27
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值