Алексей Шипилёв — Java-объекты наизнанку
By JPoint, Joker и JUG ru — Java-конференции · другие пересказы этого канала
Это пересказ, составленный ИИ, — видео канала JPoint, Joker и JUG ru — Java-конференции длительностью 1 ч 8 мин «Алексей Шипилёв — Java-объекты наизнанку», опубликовано 31 мая 2022 г.. Полная расшифровка сжата до 10 тезисов с переходом по таймкодам.
Пересказ
Этот доклад Алексея Шепелёва на Joker 2021 подробно разбирает внутреннее устройство объектов в HotSpot JVM, методы измерения их размера и множество факторов, таких как битность VM, размер кучи, конфигурация и версии JDK, которые влияют на их фактический размер и расположение в памяти.
Тезисы
- Стандартные инструменты, такие как хипдампы (HPROF), не всегда точно отражают реальный размер объектов в рантайме из-за особенностей формата и не являются дампом кучи, а лишь её моделью.
- Для точного измерения размера объектов можно использовать `ThreadMXBean.getAllocatedBytes` с коррекцией на оверхеды или специализированные инструменты, такие как JOL (Java Object Layout), который работает через Reflection и Unsafe.
- Размеры примитивных типов в памяти в основном соответствуют ожидаемым, за исключением `boolean`, который обычно занимает 8 бит для обеспечения корректной работы с Java Memory Model и производительности.
- Заголовок объекта в HotSpot состоит из Markword и Classword, которые хранят метаинформацию, такую как данные для сборщика мусора (возраст, форвардинг-поинтеры), идентификационный хеш-код и информацию о блокировках.
- Markword является тегированным значением, его размер зависит от битности VM, и он адаптивно используется для различных целей, что влияет на производительность (например, вычисление хеш-кода может удорожить блокировку).
- Classword указывает на нативную структуру класса, обеспечивая быстрые проверки типов, метод `getClass()` и позволяя сборщику мусора эффективно определять размер объекта для обхода кучи.
- Размер ссылок (references) зависит от битности VM и использования `Compressed Oops`, которые могут уменьшить их до 4 байт при размере кучи до 32 ГБ, что существенно влияет на общий размер объекта.
- Выравнивание объектов и полей в памяти (обычно до 8 байт) приводит к появлению внутренних дырок (padding), которые могут быть использованы для размещения других полей или, наоборот, увеличивать размер объекта.
- Современные версии JDK (например, JDK 15) включают переписанный лейаутер полей, который оптимизирует их расположение, игнорируя порядок объявления, что может влиять на низкоуровневые оптимизации и требует пересмотра старых трюков с падингом.
- Объекты в HotSpot JVM имеют сложную внутреннюю структуру, и их фактический размер зависит от множества факторов, включая конфигурацию VM и версию JDK.
Пересказ любого видео с YouTube — бесплатно
Вы только что прочитали пересказ этого видео. Вставьте ссылку на любое другое — получите тезисы с таймкодами за секунды. Без регистрации, 5 в день бесплатно.
Ещё материалы
Другие пересказы
45 минДенис Фокин, Егор Куликов — Генерация тестов для Spring: из чего же, из чего же сделаны тесты
Доклад представляет инструмент Unit Test Bot, который автоматически генерирует юнит- и интеграционные тесты для Java-приложений, в том числе на фреймворке Spring, используя символьное исполнение и дру
46 минАндрей Боханко — Что такое LLVM и при чем здесь Java?
Доклад посвящен проекту LLVM, его истории, философии, причинам успеха, широкому распространению в различных областях программирования и его ограниченному, но растущему влиянию на экосистему Java.
45 минАлександр Нозик — Kotlin и контекстно-ориентированное мышление
Доклад посвящен контекстно-ориентированному программированию, его историческому развитию и долгожданному появлению контекстных параметров в Kotlin, которые предоставляют мощные инструменты для явного
1 ч 32 минJordan Peterson: How to Spot Hidden Manipulators (Most People Miss These Signs) @JordanBPeterson
Доктор Джордан Питерсон обсуждает повсеместное влияние личностей «темной тетрады», особенно в социальных сетях и отношениях, подчеркивая важность этического поведения, самосовершенствования и принятия
1 ч 13 минАртем Ерошенко — Тест-кейсы как код
Докладчик Артём Ярошенко представляет подход «тест-кейсы как код», который предлагает хранить тест-кейсы в системе контроля версий для повышения эффективности, переиспользования и управляемости процес