Будет ли создание java.time.LocalTime также вызвать создание sun.util.calendar.ZoneInfo
В последнее время происходит процесс, который требует больше памяти, чем ожидалось. После проверки кучи есть много java.util.LocalTime
создано. Что можно объяснить, потому что мы храним некоторые данные во временной карте с LocalTime
в качестве ключа. Вероятно, слишком много этих данных, сгенерированных из восходящего потока, по сравнению с ожидаемыми.
Тем не менее, есть удивление, что также много sun.util.calendar.ZoneInfo
созданы. Мы не используем этот класс; будет ли это генерироваться LocalTime
? Но если мы проверим исходный код java.time.LocalTime
Я не вижу ZoneInfo
используется; у кого-нибудь есть идеи по этому поводу?
1 ответ
Извините за поздний ответ, но теперь я нашел время для проверки 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
будет загружен тоже.