There are hundreds of JVM parameters and options out there. Here we are going to take a closer look at the internal structure of HotSpot VM while over-viewing memory spaces and different types of Garbage Collectors.
Презентация с Highload++ 2011
---
Принципы работы сборщика мусора в JVM. Использование принципа поколений. Параллельная и фоновая сборка мусора. Особенности реализации алгоритмов сборки мусора в HostSpot и JRockit JVM. Причины пауз сборки мусора и способы борьбы с ними. Особенности работы с "большими" JVM - 32 гигабайта и больше. Альтернативы сборщике мусора, прямое управление памятью в Java.
Презентация с Highload++ 2011
---
Принципы работы сборщика мусора в JVM. Использование принципа поколений. Параллельная и фоновая сборка мусора. Особенности реализации алгоритмов сборки мусора в HostSpot и JRockit JVM. Причины пауз сборки мусора и способы борьбы с ними. Особенности работы с "большими" JVM - 32 гигабайта и больше. Альтернативы сборщике мусора, прямое управление памятью в Java.
Антон Потапов — С++ контейнеры и многопоточность: вместе или врозь?Yandex
Антон Потапов, Intel
Стандартная библиотека С++ содержит набор наиболее распространённых контейнеров для организации данных. С++11 предоставляет минимальные гарантии безопасности работы с контейнерами в многопоточной среде, но зачастую этого недостаточно для эффективного их использования в параллельных программах. В докладе речь пойдёт о современных подходах к реализации эффективных «конкурентных» контейнеров, а также основных возникающих при этом проблемах и способах их решения.
Денис Кормалев — Qt. Как выжить на минном поле. Советы сапёруYandex
Денис Кормалев, Опенсофт.
Этот небольшой доклад рассказывает о различных проблемах и хитростях разработки на C++/Qt, не всегда видимых с первого взгляда. Все примеры основаны на реальных событиях, с которыми так или иначе сталкивался докладчик. Рассчитан на людей, которые уже используют Qt в разработке, но ещё не успели досконально разобраться, как работает этот инструмент.
Материалы с доклада: http://getdev.net/Event/async-javascript
Рассказ о том, как работает асинхронность в JavaScript, кто стоит в очереди выполнения, почему в JavaScript никогда не будет процессорной гонки, как давать отсроченные обещания и что делать, если одна из ваших функций подхватила заразу асинхронности
The 5-th lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
Understanding bytecode and what bytecode is likely to be generated by a Java compiler helps the Java programmer in the same way that knowledge of assembler helps the C or C++ programmer. Java bytecode is the form of instructions that Java virtual machine executes. This knowledge is crucial when debugging and doing performance and memory usage tuning. The presenter will share his knowledge on what bytecode means for your platform and how to create compiler while using some awesome tools.
Антон Потапов — С++ контейнеры и многопоточность: вместе или врозь?Yandex
Антон Потапов, Intel
Стандартная библиотека С++ содержит набор наиболее распространённых контейнеров для организации данных. С++11 предоставляет минимальные гарантии безопасности работы с контейнерами в многопоточной среде, но зачастую этого недостаточно для эффективного их использования в параллельных программах. В докладе речь пойдёт о современных подходах к реализации эффективных «конкурентных» контейнеров, а также основных возникающих при этом проблемах и способах их решения.
Денис Кормалев — Qt. Как выжить на минном поле. Советы сапёруYandex
Денис Кормалев, Опенсофт.
Этот небольшой доклад рассказывает о различных проблемах и хитростях разработки на C++/Qt, не всегда видимых с первого взгляда. Все примеры основаны на реальных событиях, с которыми так или иначе сталкивался докладчик. Рассчитан на людей, которые уже используют Qt в разработке, но ещё не успели досконально разобраться, как работает этот инструмент.
Материалы с доклада: http://getdev.net/Event/async-javascript
Рассказ о том, как работает асинхронность в JavaScript, кто стоит в очереди выполнения, почему в JavaScript никогда не будет процессорной гонки, как давать отсроченные обещания и что делать, если одна из ваших функций подхватила заразу асинхронности
The 5-th lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
Understanding bytecode and what bytecode is likely to be generated by a Java compiler helps the Java programmer in the same way that knowledge of assembler helps the C or C++ programmer. Java bytecode is the form of instructions that Java virtual machine executes. This knowledge is crucial when debugging and doing performance and memory usage tuning. The presenter will share his knowledge on what bytecode means for your platform and how to create compiler while using some awesome tools.
BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...Ontico
РИТ++ 2017, HighLoad Junior
Зал Сингапур, 5 июня, 11:00
Тезисы:
http://junior.highload.ru/2017/abstracts/2683.html
Наш доклад описывает способ использования больших объемов памяти, которые стали доступны в последние годы. К сожалению, эта память обычно остается незадействованной в управляемых средах исполнения в связи с принудительной сборкой мусора. Разработчики прибегают к внешним хранилищам данных ( i.e Memcached), что несет дополнительные расходы.
...
В презентации рассказывается о структурах памяти в JVM: Heap, Non-Heap, Stack, об атомарности операций и о garbage collector. Рассмотрен пример, как работает стек. Также, приведены примеры, как использовать jVisualVM и что она может показать.
Как упростить жизнь системному администратору с помощью Python – Андрей Васил...Yandex
В наши времена облаков и Big Data трудно представить себе проект без хранилища данных. И сложностей с ним вроде бы нет — поставил, настроил и забыл. Но как быть, если хранилище живёт одновременно в нескольких дата-центрах, в нём лежит 4 петабайта данных, качество железа и сети оставляет желать лучшего, а количество системных администраторов ограничено?
В докладе я расскажу о нашем решении этой проблемы, которое мы назвали Mastermind, о том, как работает фантазия сисадминов, когда в их руки попадает удобный инструмент, и о том, с какими проблемами мы столкнулись в распределённой среде.
Управление ресурсами в Linux и OpenVZ Кирилл Колышкин kir@openvz.org http://openvz.org/
Отчет - http://yourcmc.ru/wiki/RootConf_2009:_%D0%9E%D1%82%D1%87%D1%91%D1%82_%D0%92%D0%B8%D1%82%D0%B0%D0%BB%D0%B8%D1%8F_%D0%A4%D0%B8%D0%BB%D0%B8%D0%BF%D0%BF%D0%BE%D0%B2%D0%B0#.D0.A3.D0.BF.D1.80.D0.B0.D0.B2.D0.BB.D0.B5.D0.BD.D0.B8.D0.B5_.D1.80.D0.B5.D1.81.D1.83.D1.80.D1.81.D0.B0.D0.BC.D0.B8_.D0.B2_Linux_.D0.B8_OpenVZ_.28.D0.B7.D0.B0.D1.87.D1.91.D1.82.21.29
2. О чем пойдет речь
•Рассмотрение с точки зрения Java программиста
•Для других программистов и системных
администраторов
•Внутренняя организация памяти JVM
3. Содержание
•Базовые сведения про Garbage Collector
•Исключительные ситуации OutOfMemory
–Почему они произошли
–Как их исправить
•Некоторые опции для тюнинга VM
•Вопросы и ответы
•Распределение памяти внутри Java machine
4. •Каждый процесс управляет памятью
•Способы управления памятью в процессе
o C (malloc() и free())
o C++(new и delete)
o Java(new и GC)
•Запускается как отдельный процесс (память между процессами не разделяется)
6. Замечание
Опции -Xmx, -Xms и –Xmn влияют только на размер «кучи» Java объектов, но не кучи
самого Java процесса – непонимание этого факта может повлечь неправильное
конфигурирование.(И как результат – ухудшение общей производительности )
10. Переполнение PermGen
•Библиотеки неявно генерирующие байткод
•Использование java.lang.reflect.Proxy
•Java Reflection API
•Serialization
•RMI
•Библиотеки явно генерирующие байткод
11. Java Thread Stack
•Память выделяется каждому созданному потоку в
индивидуальное пользование.
•Хранится стек вызова методов, локальные
переменные и параметры.
o Локальная переменная примитивного типа -
все данные полностью хранятся на стеке.
o Объект - ссылка хранится на стеке, сам же
объект уже создается в куче.
12. Размеры объектов в памяти
(примитивные типы)
Java types bytes required
boolean
1
byte
char
2
short
int
4
float
long
8
double
13. Размеры объектов в памяти
•Обычные объекты занимают минимум 8байт
(служебная информация)
•Массивы занимают минимум 12 байт (8 как
обычный объект и 4 - размер массива)
•Для каждого объект производится выравнивание
по границе 8байт
14. Размеры объектов в памяти
• Объект с полем типа char занимает 16 байт
Заголовок 8 байт + поле 1 байт + выравнивание 7 байт
• Объект с 8 полями типа char занимает 16 байт
Заголовок 8 байт + 8 полей по 1 байт
• Массив 10x10 int занимает 616 байт
Внешний массив - 52 (после паддинга 56 байт)+
10 внутренних массивов по 56 байт(52 байта до выравнивания)
15. История Garbage Collector
• Механизм GC был впервые использован Джоном
Маккарти в языке LISP (1959).
• В последствии часто применялся в
функциональных и логических ЯП.
• С 1980-х годов технология сборки мусора стала
использоваться и в директивных, и в объектных
языках программирования
16. Немного теории
Сборщики мусора используют консервативные
оценки, позволяющие определить, что в будущем
объект гарантированно не будет использоваться.
Обычно критерием того, что объект ещё
используется, является наличие ссылок на него.
Если в системе нет больше ссылок на данный
объект, то он больше не может быть использован
программой и может быть удалён. Этот критерий
используется большинством современных
сборщиков мусора и называется ещё
достижимостью объекта.
17. Еще немного теории - Алгоритм
«Mark and sweep»
• для каждого объекта есть флаг, указывающий,
достижим ли этот объект из программы или нет;
• изначально все объекты, кроме корневых,
помечаются как недостижимые;
• рекурсивно просматриваются и помечаются как
достижимые объекты ещё не помеченные и до
которых можно добраться из корневых объектов
по ссылкам;
• те объекты, у которых флаг достижимости не
был установлен, считаются недостижимыми.
18. Ближе к практике – Фазы GC
• Lock it down
o Все объекты должны быть заблокированы,
что бы они не изменились в процессе сборки
мусора
• Mark
o Пройтись по всем объектам
o Отметить недостижимые как «мусор»
• Sweep
o Удалить отмеченные объекты
o Освободить память
19. Стратегии GC
• Stop The World
• Incremental
o Отложить GC до окончания создания новых
объектов
• Concurrent/Parallel
o Выделение памяти происходит совместно с
GC
o Очень сложные режимы блокировок
o Поколения объектов
• CMS – Concurrent Mark and Sweep
23. Как это работает
1. Создается новый объект
2. Если Eden переполнен – минорная сборка
3. Выжившие объекты копируются в 1st survivor
space
4. Следующий раз при заполнении Eden
• Копируются из Eden в 2nd
• Копируются из 1st в 2nd
5. Если 2nd заполнен и объекты все еще остаются
в Eden или в 1st
o Копируются в tenured
24. Рекомендуемые опции GC
Установки GC
-XX:+UseConcMarkSweepGC
-XX:+CMSIncrementalMode
-XX:+CMSIncrementalPacing
-XX:CMSIncrementalDutyCycleMin=0
-XX:+CMSIncrementalDutyCycle=10
-XX:+UseParNewGC
-XX:+CMSPermGenSweepingEnabled
Для анализа того, что происходит
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:-TraceClassUnloading