openjdk.ruOpenJDK на русском

JEP 151: Compress Time-Zone Data

Сжатие данных о часовых поясах

AuthorsStuart Marks, Darryl Mocek, Peter Jensen
ОтветственныйStuart Marks
ТипFeature
ОбластьJDK
СтатусClosed / Withdrawn
Компонентcore-libs
Обсуждениеi18n dash dev at openjdk dot java dot net
ТрудоёмкостьS
DuplicatesJEP 150: Date & Time API
ОдобренBrian Goetz
Создан2011/08/26 20:00
Обновлён2014/07/10 20:31
Задача8046141

Аннотация

Хранить данные о часовых поясах эффективнее: в одном сжатом файле, а не в отдельном несжатом файле для каждого пояса.

Описание

Изначально данные о часовых поясах хранились в отдельных несжатых файлах, а не в одном сжатом файле, по-видимому (как мы предполагаем), чтобы оптимизировать доступ к данным конкретного часового пояса и уменьшить потребление динамической памяти.

Поскольку данные для конкретного пояса считываются только один раз, а большинство приложений использует лишь один или несколько поясов, это, вероятно, не является серьёзной проблемой. Вполне возможно, что текущая реализация была просто удобнее и не было требования, которое оправдало бы дополнительные усилия на использование сжатого формата.

Для большого числа файлов случайного размера ожидаемые накладные расходы дискового пространства составляют число-файлов * 0,5 * размер-блока-файловой-системы.

Размер блока в файловых системах UNIX, Linux (включая встраиваемые варианты Linux) и NTFS обычно составляет 4 КБ. Файлов часовых поясов больше 500, поэтому ожидаемые накладные расходы составляют около 1 МБ (что соответствует наблюдениям).

В системе с меньшим размером блока, 1 КБ, мы всё равно ожидали бы накладные расходы около 250 КБ, то есть около 100 % фактического размера файлов.

Варианты уменьшения динамического потребления ресурсов:

  1. Хранить файлы в архиве zip/jar
  2. Использовать встраиваемую базу данных

Для варианта (1) требуются совсем небольшие локальные изменения, чтобы реализовать чтение записей zip-файла вместо отдельных файлов.

Вариант (2) требует базы данных. Характеристики производительности при использовании базы данных неизвестны. Этот вариант всё же может быть интересен, если будущий формат установленных модулей уже будет использовать базу данных для эффективного хранения элементов модуля и доступа к ним.

Тестирование

Требуется протестировать, как изменение влияет на производительность получения данных о часовых поясах, особенно при первом обращении за этими данными.

Требуется изменить тестирование инструментов обновления, чтобы убедиться, что данные о часовых поясах записываются правильно.

Риски и допущения

Обновления часовых поясов в сжатом формате не будут применимы к более старым JDK. Это может потребовать некоторого дублирования усилий, чтобы выпускать обновления в двух разных форматах.

Есть риск снижения производительности при получении данных о часовых поясах, в частности для первого запрошенного пояса. В случае zip-файла снижение производительности, как ожидается, будет небольшим.

Влияние

  • Другие компоненты JDK: инструменты обновления данных о часовых поясах и локалях придётся изменить, чтобы они поддерживали новый формат.