2015-11-19 4 views
-1

Как я уже читал, JVM имеет два пространства памяти (в java 8), кучу и метапас.В JVM какое пространство памяти занимает память стека?

Мы можем указать память стека с помощью флага -Xss (поскольку я прочитал, по умолчанию 1 МБ в java 8). Если программа java создает тысячи потоков, память для стеков может быть довольно значительной.

Итак, в каком пространстве памяти (кучи или метапас) находятся потоки потоков?

+0

Размер стека _per thread_; как таковой, этот 1MB будет потребляться только для каждого потока, и ни один из двух потоков не разделяет это пространство. После этого, ну, это 2015 год, поэтому операционные системы, которые не выполняют поисковый запрос, мертвы или, в худшем случае, умирают. – fge

ответ

-1

Память виртуальной машины Java состоит из регионов. Область стека, где хранятся переменные и методы, и область пространства кучи, где хранится все остальное. Явное пространство Java снова структурировано в разных регионах, называемых поколениями и где хранится объект, зависит от того, как долго он живет.

В JVM есть только одна куча, и все потоки делят ее. Куча содержит только объекты. Невозможно поместить одиночный примитивный тип или ссылку на объект в куче - эти вещи должны быть частью объекта . Массивы находятся в куче, включая массивы примитивных типов , но в Java массивы тоже являются объектами.

Помимо Java-стека и кучи, данные другого места могут находиться вв JVM - это область метода, которая содержит все переменные класса (или ), используемые программой. Область метода похожа на , поскольку в ней содержатся только примитивные типы и объекты ссылок. Однако, в отличие от стека, переменные класса в области методов разделяются всеми потоками.

В JVM имеется только одна куча, и все потоки делятся ею. для подробной информации читайте в here

+0

Я не возражаю против нисходящего потока, но, я определенно не знаю, почему причина нисходящего. Если я допустил ошибку, скажите мне причину, чтобы я не повторил ее в будущем. – Raf

+0

Ваш ответ непонятен и напрямую не отвечает на мой вопрос. Вы говорите, что существует область стека, но поиск в Google 'Java stack region' не дает никаких результатов, подтверждающих это. Кроме того, код метода не находится в стеке, а не в metaspace. Кроме того, каждый поток получает свою собственную стек стек, но вы не указали, идут ли они в том же «регионе», о котором вы говорили. Также вы указали в жирном тексте (подразумевая, что он отвечает на мой конкретный вопрос), что все потоки разделяют одну и ту же кучу. Но это не отвечает на мой вопрос. (Мой вопрос в том, в какой области находится стек каждого потока) –

+0

Спасибо за отзыв. Да, я признаю, что область стека java недопустима и должна быть java-стекей, регионы применимы только к куче. Я написал ответ с java 7 в виду. – Raf

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