Please enable JavaScript.
Coggle requires JavaScript to display documents.
JVM - Coggle Diagram
JVM
Рекомендации
Избегать создания ненужных объектов, особенно в циклах, стримах, чтобы избежать перенаполнения кучи
Использовать локальные, вместо полей объектов. Локальные переменные освобождаются сразу после использования, а поля объектов могут существовать дольше, даже если они больше не нужны.
Обнулять ссылки на объекты, когда они больше не используются. Это позволит сборщику мусора быстрее освободить память
Использование к месту try with resources для автоматического закрытия ресурсов, после их использования
-
-
-
Типы ссылок
Сильные. Обычные. Указания на создаваемые объекты, которые должны быть в памяти. Если не случается выделить память - OutOfMemoryException
Мягкие. КЭШ. Сувствительны к объему оперативной памяти. Объекты по ним могут зачишаться только в случае необходимости - Например нужно создать объекты с сильными силками, но уже негде. Лучше освободить память, немного зависнуть, но не уронить процесс
Слабые ссылки. Полезны для сопоставления объектов чему-то, без удерживания их от зачистки, когда они больше не нужныНа возможность зачистки они не влияют. Слабые ссылки будут очищены при очередной итерации запуска сборщика
Фантомные ссылки возникают, когда объект признан мусором, финализирован и находится в процессе зачистки.
JMM
Heap (Куча)
-
-
-
Если памяти не хватает, то она запрашивается у ОС
-
Доступ к памяти межденнее, чем у стека в силу специфики реализации
-
Stack
-
-
-
-
-
-
Содержит информацию про корневые объекты, методы, компоненты, необходимые для компиляции приложения
У каждого потока в Java свой стек, но куча для всех одна
Сборщик мусора
-
-
Алгоритм
Маркировка корневых объектов - статических, ссылок. Так же маркирует все доступные, достижимые из корневых
Определение, какие объекты не могут быть доступны из корневых и помечает их для удаления
-
Алгоритм - поколения
-
-
Если объекты выживают, то они перемещаются в старое поколение - сборка мусора - реже
-