Размер кучи:
Когда программа Java запускается, виртуальная машина Java получает некоторую память от операционной системы. Виртуальная машина Java или JVM использует эту память для всех своих нужд, и часть этой памяти называется памятью кучи Java. Всякий раз, когда мы создаем объект, используя new operator или любым другим способом объекту выделяется память из кучи, и когда объект умирает или собирает мусор, память возвращается в пространство кучи в Java.
Учебник по увеличению размера памяти Eclipse, чтобы избежать OOM при запуске .
| Опция JVM | Имея в виду |
|---|---|
| -Xms | начальный размер кучи Java |
| -Xmx | максимальный размер кучи Java |
| -Xmn | размер кучи для молодого поколения |
Для крупных производственных проектов целесообразно устанавливать minimum -Xms а также maximum -Xmx размеры кучи к тому же значению.
Для эффективного сбора мусора, -Xmn значение должно быть ниже, чем -Xmx значение. Размер кучи не определяет объем памяти, используемый вашим процессом.
Если вы наблюдаете за процессом Java с помощью инструмента ОС, такого как top или task manager вы можете увидеть, что объем используемой памяти превышает объем, указанный вами для -Xmx. -Xmx ограничивает размер кучи Java, Java будет выделять память для других вещей, включая стек для каждого потока . Нередко общее потребление памяти виртуальной машиной превышает значение -Xmx.
Размер стека:
Каждый поток в виртуальной машине получает стек. Размер стека будет ограничивать количество потоков, которое вы можете иметь, слишком большое для размера стека, и вам не хватит памяти, поскольку каждому потоку выделяется больше памяти, чем ему нужно.
| Опция JVM | Имея в виду |
|---|---|
| -Xss | размер стека для каждого потока |
-Xss определяет размер стека: — Xss1024k , Если пространство стека слишком мало, в конечном итоге вы увидите исключение класса java.lang.StackOverflowError.
Вывоз мусора:
По сути, работают два потока GC. Одна из них — очень легкая нить, которая собирает «маленькие» коллекции в первую очередь для молодого поколения кучи. Другой является Full GC thread которая пересекает всю кучу, когда не хватает памяти, чтобы выделить место для объектов, которые повышаются от молодых до старшего поколения.
Если имеется утечка памяти или выделена неадекватная куча, в конечном итоге старшее поколение начнет исчерпывать пространство, в результате чего поток Full GC будет работать (почти) непрерывно.
Поскольку этот процесс stops the world Java-приложение не сможет отвечать на запросы, и они начнут выполнять резервное копирование или OOM .
Сумма, выделенная на Young(Eden) поколение это значение, указанное с -Xmn , Сумма, выделенная на older generation is the value of -Xmx minus the -Xmn ,
Как правило, вы не хотите, чтобы Eden был слишком большим, или GC потребуется слишком много времени, чтобы просмотреть его и найти пространство, которое можно восстановить.
0.00 (0%) 0 votes








