gpt4 book ai didi

java - java.time.LocalTime 的创建也会触发 sun.util.calendar.ZoneInfo 的创建

转载 作者:行者123 更新时间:2023-11-30 06:22:07 25 4
gpt4 key购买 nike

最近我们正在研究一个进程,它占用的内存比预期多得多。检查堆后发现创建了很多java.util.LocalTime。这是可以解释的,因为我们确实将一些数据存储在以 LocalTime 作为键的时间图中。与预期相比,上游生成的数据可能过多。

但是,令人惊讶的是还创建了很多 sun.util.calendar.ZoneInfo。我们不使用这个类;它会由 LocalTime 生成吗?但是如果我们检查java.time.LocalTime的源代码,我没有看到ZoneInfo被使用;有人对此有什么想法吗?

最佳答案

很抱歉回答晚了,但现在我找到了一些时间检查 JDK 源

如果您调用 LocalTime.now(),则 java.time 将使用系统时区(隐式依赖项)。

public static LocalTime now() {
return now(Clock.systemDefaultZone());
}

然后Clock加载ZoneId.systemDefault():

public static Clock systemDefaultZone() {
return new SystemClock(ZoneId.systemDefault());
}

最后,类java.util.TimeZone用于查找默认时区。

public static ZoneId systemDefault() {
return TimeZone.getDefault().toZoneId();
}

如果您查看 TimeZone.getDefault() 的源代码,那么您将在堆栈的某个深度看到:

private static TimeZone getTimeZone(String ID, boolean fallback) {
TimeZone tz = ZoneInfo.getTimeZone(ID);
if (tz == null) {
tz = parseCustomTimeZone(ID);
if (tz == null && fallback) {
tz = new ZoneInfo(GMT_ID, 0);
}
}
return tz;
}

瞧,sun.util.calendar.ZoneInfo 类也将被加载。

关于java - java.time.LocalTime 的创建也会触发 sun.util.calendar.ZoneInfo 的创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47904700/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com