2016-09-29 6 views
0

Мы, разработчики Java, иногда используем java -Xss 1M, чтобы убедиться, что мы предоставляем 1 МБ места для каждого стека, характерного для потока. Теперь я часто путаю, когда JVM заимствует это 1 МБ из, из кучи или системной памяти, или есть какая-то конкретная память Java, выделяемая для потоков. Не могли бы вы помочь мне понять это?JVM стек памяти

Кроме того, есть ли у нас визуальный (подключаемый) инструмент выполнения, который показывает содержимое кучи и стеков понятным способом?

Заранее спасибо.

+0

Как вы определяете, что вам нужен ровно 1 МБ размер стека на поток? – Holger

ответ

1

где JVM заимствует это 1 МБ от кучи или системной памяти?

JVM «заимствует» память стека из операционной системы, поэтому, возможно, это то, что вы называете «системной памятью». JVM фактически делает запросы из системы виртуальной памяти OS для блоков памяти, которые она использует как пространство стека потоков. Вся память, которую использует JVM (код, стек, куча и т. Д.), Запрашивается у ОС таким же образом. Память стека отделена от памяти кучи, которая управляется самой JVM.

Для получения дополнительной информации о том, как память о JVM делится, я бы проверить этот ответ: How is the java memory pool divided?

Кроме того, у нас есть визуальный (плагин) инструмент выполнения, который показывает содержимое кучи и стеков понятным способом?

Если вы говорите о содержимом кучной памяти, тогда вы должны найти информацию о профилировщиках памяти. Вот хороший question about that topic. Вот также good tutorial on the subject. Тем не менее, я не уверен, что эти инструменты покажут вам память «понятным образом». Они используются для обнаружения утечек памяти или общих проблем с распределением объектов.

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

И наконец, для обзора того, сколько памяти используется различными частями JVM, вы можете use jconsole as well.

+1

Особенности JVisualVM, который также входит в jdk, являются надмножеством jconsole. Особенно с плагином VisualGC, он обеспечивает отличный обзор памяти кучи ... – Holger

+0

Спасибо. На самом деле jconsole предоставляет некоторые дополнительные сведения на вкладке памяти, которая недоступна в JVisualVM @Holger. – Gray

Смежные вопросы