JEP 151: Compress Time-Zone Data
Сжатие данных о часовых поясах
| Authors | Stuart Marks, Darryl Mocek, Peter Jensen |
| Ответственный | Stuart Marks |
| Тип | Feature |
| Область | JDK |
| Статус | Closed / Withdrawn |
| Компонент | core-libs |
| Обсуждение | i18n dash dev at openjdk dot java dot net |
| Трудоёмкость | S |
| Duplicates | JEP 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 % фактического размера файлов.
Варианты уменьшения динамического потребления ресурсов:
- Хранить файлы в архиве zip/jar
- Использовать встраиваемую базу данных
Для варианта (1) требуются совсем небольшие локальные изменения, чтобы реализовать чтение записей zip-файла вместо отдельных файлов.
Вариант (2) требует базы данных. Характеристики производительности при использовании базы данных неизвестны. Этот вариант всё же может быть интересен, если будущий формат установленных модулей уже будет использовать базу данных для эффективного хранения элементов модуля и доступа к ним.
Тестирование
Требуется протестировать, как изменение влияет на производительность получения данных о часовых поясах, особенно при первом обращении за этими данными.
Требуется изменить тестирование инструментов обновления, чтобы убедиться, что данные о часовых поясах записываются правильно.
Риски и допущения
Обновления часовых поясов в сжатом формате не будут применимы к более старым JDK. Это может потребовать некоторого дублирования усилий, чтобы выпускать обновления в двух разных форматах.
Есть риск снижения производительности при получении данных о часовых поясах, в частности для первого запрошенного пояса. В случае zip-файла снижение производительности, как ожидается, будет небольшим.
Влияние
- Другие компоненты JDK: инструменты обновления данных о часовых поясах и локалях придётся изменить, чтобы они поддерживали новый формат.