digital-garden/knowledge/dev/java/Лилипут.md
2024-06-13 21:01:37 +03:00

1.6 KiB
Raw Blame History

JEP 450 Даты релиза нет, но есть тестовые сборки Средний размер объекта 64 байта + 16 байт заголовок Лилипут предполагает, что мы уменьшим размер заголовка в 2 раза, в идеале в 4 раза

Mark Wod

  • 2 младших бита отводят под состояние:
  • GC Age (4 бита). Сколько сборок мусора пережил
  • Не успел записать
  • Не успел записать

Зачем?

  • Экономия до 10% памяти
  • Улучшение локальности памяти
    • Ускорение

Сжимаем

  • Уменьшаем ClassWord
    • Еще в JDK 6 сжали указатели
    • JDK 15. Сжатие указателей на класс можно включить независимо
    • Лилипут: Всегда используем сжатие
  • Уменьшаем MarkWord
    • 25 неиспользуемых битов отбрасываем
    • Неиспользуемый бит между GC Age и Identity Hash Code
    • Identity Hash Code - 25 бит

Планы на будущее

  • Сократить identity hash code до 2 бит в заголовке
  • Сократить указатель на класс до 23 бит
  • Хранить forwarding pointer в старом теле объекта

Как попробовать

Есть сборка у амазона, необходимо указать два флага. Есть сборка от Шипилева.