[JVM Framework Знание резюме]

Распределение памяти виртуальной машины Java

  • Резьбонарезной разделяемая область данных:
    область метод -> Информация о классе, статические переменные
    кучи -> массив объектов
  • Thread карантин
    виртуального стека машины -> Методы
    нативный метод стеки -> Локальные нативные библиотеки метод
  • Стек, программа счетчик
  • JVM эксплуатационные данные

счетчик программ

Байты-код номер строки нить в изоляции, относительно небольшое пространство памяти, выполняется текущим потоком является независимыми исполнительными блоками, реализация только мест без ООГО ЦП, поддерживаемого виртуальной машиной, он не будет появляться OOM

стек VM

Метод Java выполняется

Метод вызов кадр стека в виртуальный стек машины во время фрейма стека: локальная таблица переменного (переменный), стек операндов (хранение A + B результатов), динамическое звено (эталонный объект-адрес), выход метода (возвращаемое значения ) глубина стека больше, чем глубина резьбы просила виртуальные машины позволили StackOverflowError

Родные стеки метод

Является ли ява выполнение области памяти нативные методы, так как есть кадр стека точка доступа виртуальная машина языка Ява и нативный метод складывает в один стек JVM Виртуальная машина Java является стандартным нативный метод стеки и стеки друг от друга

отвал

Java памяти для хранения экземпляра объекта области, почти все экземпляров объектов назначается здесь все нити разделяют новое поколение, старые года jmap -heap ПИД-регулятор;

Методы района

Каждая поток разделяет область памяти памяти была загружена информация виртуальной машины, константы, статические переменные, время компилятор для компиляции коды и других типов данных области реализации Hotspot с постоянным поколением (пусть сборщик мусор может область управления), чтобы восстановление и удаление постоянной бассейн бросает OOM, когда он был не в состоянии удовлетворить потребности распределения памяти

Продолжительность постоянный бассейн

Продолжительность постоянная бассейн является частью методы зоны, поле класса, кроме того, способ, интерфейс постоянного пула, количество сгенерированного компилятора хранений буквенных и символических ссылок, этой части в методику временной области хранения постоянная пула загружен классом ,

StringTable метод HashSet структуры является частью области, метод ограничен областью, до сих пор ООМ

создание объектов Java

-> статические методы статического блока

  1. новые инструкции, постоянный пул определяется не опорный символ, он уже загружен через
  2. Определение того загружаются класс, разобранная, инициализации
  3. Для нового объекта выделяется в динамической памяти Java
    1) Указатель столкновений (сравнительных памятях в чистом виде)

    : 1. 2. Переместить указатель выделенной памяти, неатомические проблемы параллелизма шага могут возникнуть, виртуальная машина Java CAS , соединенный посредством отказа повторной попытки обеспечить атомную операцию обновления
    2) свободный список (хаотическая память)
    динамической память свободной памяти адрес
    : 1. 2. изменить выделенную память свободного списка адреса неатомическими могут возникнуть проблемы шага параллелизм, Java , виртуальная машина в сочетании CAS сбой повторных попытки Это означает , что для обеспечения атомарных операций обновления
  4. Будет выделено в пространство памяти инициализируется нулевым значением
  5. Информация заголовка объекта Set (GC поколений Возраст, HashCode, информации о метаданных объекта)
  6. выполнение метод

расположение объектов в памяти Java

Значение атрибута объекта -> первый экземпляр объекта данных хранится 64-разрядный 64-битной машине, машина 32 память 32, кратное 8

Доступ к объектам Java

  1. указатель прямого доступа
  2. Ручка посещения

    контрастности:
  3. Эффективность доступа: Высокоэффективный указатель прямого доступа (Hotspot этот путь)
  4. Вывоз мусора: Ручка высокого эффективности доступа, ручка сборщик мусора обновляет только бассейн, и метод прямого доступа должен обновить адрес ссылки указателя

Алгоритм сбора мусора

  1. Счетчик ссылок ,

    когда экземпляр объекта присваивается переменной, переменная счетчика устанавливается в 1 , когда любой другой переменной присваивается упомянутого объекта, имеет значение +1 (а = Ь, то Ь эталонного экземпляра объекта счетчика + 1) , когда ссылка на экземпляр объекта на протяжении жизненного цикла (выполнения метода) или установить на новое значение, экземпляр объекта эталонного счетчика -1
    не может разрешить циклическую ссылку
    анализа достижимости
    ГХ Root (стек VM объект ссылаются объекты , указанные в нативных стеках методы, атрибут объекта ссылается на статическую области метода, метод постоянной ссылка на объект области)
  2. Марка - развертки

    Теги объекта должны быть восстановлены, отмечая завершение единого восстановления после
    менее чем:
    1. КПД, маркировка два четкой эффективность процесса не высока
    2. Проблемы пространства, большое количество дискретной фрагментации метки памяти после очистки, чрезмерное мусора когда программа должна выделять больший объект, вы не можете найти достаточно непрерывную память и должны были вызвать действие сбора мусора заранее
  3. Марк - Копия

    копии живых объектов блок памяти для блока памяти B (Survivor к), а затем блок памяти A (Eden + Survivor с) пусто,
    лишь небольшая часть движения объекта, тем больше объект должен быть переработаны
    Eden: от Survivor:. = 8 Survivor :. 1 :.-
    98% целевого "смерть Chaosheng вечера", память нового поколения доступна до 90% (80% + 10%), 98% от мишени переработанного общего, когда менее 90% когда объекты восстанавливаются (10% или более объекты сохранились), оставшийся в живых , чтобы пространство не достаточно, мы должны полагаться на гарантии старой - х распределений
  4. Марк - отделка

    старый не подходит для алгоритма репликации
  5. 2. Дополнительные операции копирования увеличились 50% неиспользуемое пространство 3. часто требуется дополнительное распределение пространства 4. Возможная гарантия 100% выживание старых объектов эпохи

шаги:

  1. знак
  2. Завершение выживания объекта не перемещается в один конец (верхний левый), структурирована и никогда не станут регулярными, а затем очистить прямую память за пределами границ

Серийный коллектор

Однопоточного сборщик мусора, пользовательские потоки , чтобы обеспечить предварительную точку первым, а затем однопоточный последовательные GC потоки были, переработка и другие GC нити закончить, а затем поток пользователя перед продолжением функции: Остановить мировую
сцену: Приложения для настольных компьютеров (дс короткого времени) с в новом поколении, клиентский терминал

ParNew коллектор

Многопоточная версия последовательного коллектора для нового поколения, и единственный способ работы с коллектором CMS, работает в режиме сервера -XX: ParallelGCThreads ограничить количество потоков сборщик мусора = ядра процессора число (чрезмерное потребление может вызвать переключение контекста) Параллельный : несколько потоков в параллельной сборки мусора, пользователи по- прежнему в ожидании параллельных потоков: пользователь поток сборщика мусора одновременно, пользовательских потоков и мусора нить работает на другом процессоре

Параллельный Мусоробот коллектор

Новое поколение коллекторов, копирование алгоритма, параллельный многопоточный касается коллектора определенного приоритета коллектор (пропускная способности = процессор работает пользовательский код времени выполнения / CPU общее время, например: 99% от времени выполнения пользовательского потока, 1% Время восстановления мусора, то пропускная способность 99%) с высокой пропускной способностью может быть эффективное использование времени центрального процессора вычислительных задач, чтобы завершить программу как можно скорее, подходит для работы в фоновом режиме, не слишком много внимания, чтобы сократить задачу взаимодействия CMS сбора мусора время паузы для пользователя интерактивная программа, хороший уровень ответа может улучшить впечатления пользователя -XX: MaxGCPauseMillis ОЙ паузу временных параметров, параметр слишком мал, будет часто ГЙ-XX: параметры GCTimeRatio, по умолчанию 99% (что составляет 99% от потоков пользовательского времени общего времени CPU)

Серийные Старые коллекторы

Серийный является версией коллекционной старых однопоточных лет коллектора, «марка - отделка» алгоритма

Параллельные Старые коллекторы

Есть версию параллельного Мусоробота коллекционной старых многопоточных лет коллектор, «марка - отделка» алгоритм

CMS коллектор

Получение самое короткое время восстановления для требуемого сборщика пауза, «знак - зачистка» алгоритм, в ответ на системы интернет внимания, система B / S

шаги:

  1. Начальная метка (а не пользовательские потоки работать вместе, трудоемкий короткий) - маркировка, какие объекты могут быть связаны непосредственно с GC Roots, очень быстро
  2. (И пользовательские потоки работать вместе, отнимающие много времени) одновременное знак - одновременные маркировки фазы проводят GC RootsTracing, ищет GC цепь опорной
  3. Перемаркированные (не работать с потоком пользователя, короткие затрат времени) - Для того, чтобы отметить период коррекции за счет одновременных потоков пользовательских привести к заметным изменениям генерируются записи метки
  4. Одновременные четкие (и пользовательские потоки выполняются вместе, отнимающие много времени) - сканирование всей области памяти

Недостатки:

  1. Очень чувствительны к ресурсам процессора (параллельной фазе марки в течение длительного времени, занимая время пользователя поток CPU)
  2. Не могу справиться с плавающим мусором (программой при одновременном ясном, пользовательском потоке генерируется новый мусор)
  3. Марк - поколение зачистки космического мусора

G1 коллектор

Сборщик мусор для серверных приложений регионе-> Знакомый Set (решение циклических ссылок)
проверить Reference (тип программы работы опорной записи, проверьте ссылку ссылочных типов) шаги:

  1. Исходные этикетки - GC Roots Тег объекта может быть непосредственно связан с
  2. Параллельное знак - начал осыпать объекты анализа GC Root достижимости для идентификации живых объектов, этот этап занимает много времени, но может быть осложнен выполнением программы пользователя
  3. Итоговая оценки (Remembered Набор ЖУРНАЛЫ РЕГИСТРАЦИИ-> Remembered Set) - исправлено во время параллельного знака из-за непрерывную работу пользовательской программы, которая привела к заметным изменениям в той части генерируемой рекордной отметки, виртуальная машина будет записана в этот период времени изменения объекта внутри нить Remembered Set Logs, заключительный этап отмечает необходимость объединить ПОМНЯТСЯ данные Set Лог в ПОМНЯТСЯ Набор в
  4. Фильтр Recycling (Подсчет и Эвакуация Live Data) - нужно только сканировать ПОМНИТСЯ Set
    преимущества:
  5. Между использования алгоритма репликации - «обновление тегов» На основе основных и области
  6. Предсказуемость паузы, время паузы уменьшается, но G1 обособленно от преследования низкой паузы, модельное время паузы можно установить предсказуемы
  7. G1 непосредственно на куче Java для утилизации Региона (кайнозойские года больше не является физически разделены, они являются частью региона)
  8. Предсказуемость модель времени паузы, G1 отслеживать отдельную области внутри размера значения накопления мусора (восстановление и повторное пространства, полученное требуемое время опыта) в фоновом режиме для поддержания списка приоритетов, в соответствии с каждым временем сбора разрешен, значение приоритета восстановления крупнейшего региона

Heap распределение памяти

Распределение кучи Java

Объект правила распределения:

  1. Основные объекты нового поколения Eden секционированной области (область Иден, чтобы скопировать живые объекты От До площади области, область Eden, из зоны извлекают, а затем копируется в целевой области Из В области, то следующий сбор мусора)
  2. Если вы начинаете внутрипотоковое выделение буфера, приоритет будет выделен на резьбу TLAB
  3. В редких случаях это может также быть непосредственно отнесено к старому году (от и до подхожу непосредственно в район старого года)

Большое распределение объектов

Крупные объекты Java объекты требует большое количество непрерывного пространства памяти, наиболее типичным является своего рода крупных объектов длинная строка, а массив -XX: объект Настройки PretenureSizeThreshold больше, чем значение непосредственно в старой эпохи, в районе Эден и избежать много репликации памяти происходит между двумя области Survivior

Анализ стека раздаточного и побегов

Побег Анализ: аналитом динамический объем, когда объект определен в методе, он может ссылаться на внешний метод, называемый метод побега. Это может быть даже внешний доступ к потоку, например, присвоение переменной или переменных экземпляров классов, к которым обращается другие потоки, называемые потоки избежать. Выделено в стеке: переменные процесса и объекты, непосредственно выделенных на стеке, автоматически уничтожается после завершения метода, сборщик мусора не требует вмешательства, тем самым улучшая производительность системы -XX: + DoEscapeAnalysis открыт анализ выхода (jdk1.8 по умолчанию) - XX: -DoEscapeAnalysis Тщательный анализ побег

команда

  1. пс -ef | Grep ява
  2. JPS -m (параметры запуска) -l (имя класса) -v (параметры виртуальной машины Java)
  3. jstat -gc виртуальных машин 27660 250 20 мониторов, работающих различную информацию о состоянии
  4. Jinfo 27660 вид и настроить виртуальную машину процесса (не отображается указан) информация о параметрах
  5. jmap сырым дампа кучи снимок -XX: + HeapDumpOnOutOfMemoryError
    jmap -heap 9366;
    jmap -histo 9366 | Больше, отображение объектов в куче статистики
    jmap -dump: Формат = Ь, файл = / Users / mousycoder / Desktop / a.bin 9366 генерироваться дамп файл
    -Xmx20m -XX: + HeapDumpOnOutOfMemoryError -XX: HeapDumpPath = / Пользователи / mousycoder / Desktop /
    jhat /Users/mousycoder/Desktop/java_pid9783.hprof графический анализ кучного
    SELECT , s.toString () из java.lang.String S WHERE ( s.value! = NULL && s.value.length> 1000 )
  6. jstack нити снимка (методы сбора стека внутри каждой виртуальной машины , выполняющей нить, основной поток используются для обнаружения проблемы)
    shutdownHook перед закрытием задачи выполняется
    jstack -l -F PID принудительного выхода

государство Thread

  1. NEW
  2. Runnable
  3. BLOCKED блокирования пассивного ожидания для блокировки монитора нити в этом состоянии (запись Set)
  4. ОЖИДАНИЯ является бесконечным ожиданием другого потока, чтобы выполнить определенное действие нити блокируется в этом состоянии (Wait Set) инициативное явное применение
  5. TIMED_WAITING предел ждет другого потока, чтобы выполнить нить действия в этом состоянии
  6. ОТМЕНЯЛОСЬ нить завершает excution

JConsole

JMX на основе визуального контроля, инструменты управления JMX открыть порт поЬир Java -Xms800m -Xmx800m -Djava.rmi.server.hostname = 192.168.1.250 -Dcom.sun.management.jmxremote.port = 1111 -Dcom.sun.management.jmxremote. = ложь SSL -Dcom.sun.management.jmxremote.authenticate = ложь -jar HC-зарядно-server.jar &

Процесс разработки Интернет Jconsole памяти аналитический процесс мышления

FullGC

Незначительное GC: Когда область Eden полна, вызвать Minor GCFullGC:

  1. Вызов System.gc () рекомендуется виртуальных машин Full GC, по -XX: RMI вызывает проклясть System.gc + DisableExplicitGC ()
  2. отсутствие Старого о пространстве для крупных объектов непосредственно в старую эпоху, долгоживущие объекты в старую эпоху, когда пространство все еще недостаточно, после осуществления полной GC, а затем преподнесли OutOfMemoryError, чтобы избежать вышеуказанных причин, вызвавший Full GC, насколько это возможно при настройке, чтобы сделать объекты Незначительная стадия GC восстанавливается, так что объекты нового поколения мульти выжить в течение некоторого времени, и не создавать слишком большие объекты и массивы
  3. Space гарантирует распределение отказу с помощью алгоритма копирования пространства памяти Minor GC требуется в качестве обеспечения по старости, если происходит сбой гарантии HandlePromotionFailure, она будет срабатывать Full GC
    предложения:
  4. Уменьшение размера -Xmx, сокращение времени GC (больший объем память кучи обеспечивается, тем дольше время полного ОЕ время паузы будет больше)
  5. Кластер развертывание

вопросы Интернет

  1. Белый список Проблема
    Решение: list.contain-> set.contain-> Bloom фильтр (большие пользователей и системы пользователя небольшое количество раствора не то же самое)
  2. Тупик
    Решение: jstack и принести новое имя резьбы
  3. Heap утечки памяти
    FullGC появляется нормальная частота 1 до 2 раз в день
    Решение: jmap, куча сваливать на ООМ + jhat
  4. Heap внешней утечки памяти
    использование кучи кучи очень низкая, но есть ООМ и Full GC
    Solution: btrace

Исследование Советы

  1. система знаний
  2. Перед карты знаний интервью FACIE
  3. Настаивайте на победу

рекомендация

отjuejin.im/post/5d91972ae51d457825210a50