Skip to content

Алексей Шипилёв — Java-объекты наизнанку

By JPoint, Joker и JUG ru — Java-конференции · другие пересказы этого канала

1 ч 8 мин видео·ru··22988 views

Это пересказ, составленный ИИ, — видео канала 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. 
Алексей Шипилёв — Java-объекты наизнанку

Алексей Шипилёв — Java-объекты наизнанку

Этот доклад Алексея Шепелёва на 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.
Пересказ любого видео — бесплатно
Summarizer.tube
Копировать всё
Ссылка
В закладки

Пересказ любого видео с YouTube — бесплатно

Вы только что прочитали пересказ этого видео. Вставьте ссылку на любое другое — получите тезисы с таймкодами за секунды. Без регистрации, 5 в день бесплатно.

Ещё материалы

Другие пересказы

45 мин

Денис Фокин, Егор Куликов — Генерация тестов для Spring: из чего же, из чего же сделаны тесты

JPoint, Joker и JUG ru — Java-конференцииru

Доклад представляет инструмент Unit Test Bot, который автоматически генерирует юнит- и интеграционные тесты для Java-приложений, в том числе на фреймворке Spring, используя символьное исполнение и дру

46 мин

Андрей Боханко — Что такое LLVM и при чем здесь Java?

JPoint, Joker и JUG ru — Java-конференцииru

Доклад посвящен проекту LLVM, его истории, философии, причинам успеха, широкому распространению в различных областях программирования и его ограниченному, но растущему влиянию на экосистему Java.

45 мин

Александр Нозик — Kotlin и контекстно-ориентированное мышление

JPoint, Joker и JUG ru — Java-конференцииru

Доклад посвящен контекстно-ориентированному программированию, его историческому развитию и долгожданному появлению контекстных параметров в Kotlin, которые предоставляют мощные инструменты для явного

1 ч 32 мин

Jordan Peterson: How to Spot Hidden Manipulators (Most People Miss These Signs) @JordanBPeterson

Jay Shetty Podcastru

Доктор Джордан Питерсон обсуждает повсеместное влияние личностей «темной тетрады», особенно в социальных сетях и отношениях, подчеркивая важность этического поведения, самосовершенствования и принятия

1 ч 13 мин

Артем Ерошенко — Тест-кейсы как код

Heisenbug — конференция по тестированиюru

Докладчик Артём Ярошенко представляет подход «тест-кейсы как код», который предлагает хранить тест-кейсы в системе контроля версий для повышения эффективности, переиспользования и управляемости процес