Вопрос по java – где находится стек Java?

19

На веб-сайте я заметил следующее: Память JVM HotSpot разделена на три области памяти:

The Java Heap The PermGen (permanent generation) space The Native Heap (C-Heap)

Где в JSM hotSpot размещен стек? В родной куче?

Обновить: другая справочная информация: Для 64-битной виртуальной машины емкость C-Heap = общая оперативная память физического сервера & amp; виртуальная память & # x2013; Java Heap - PermGen

Что происходит с hotSpot jvm? Большое спасибо Вам jiafu
В 32-битном или 64-битном C куча ограничена виртуальной памятью, которую позволяет ОС. Физическая память не важна, поэтому название «виртуальный» ;) Peter Lawrey
Везде, где реализация выделяет это ... ta.speot.is
Стек может быть выделен для любого из трех пространств памяти, в зависимости от реализации JVM (то есть Oracle и Apple разрабатывают различные реализации Java). Vulcan
Имейте в виду, что код Java может выполняться под JIT-компилятором, что также может изменить это. Kristopher Micinski

Ваш Ответ

2   ответа
25

It is implementation dependent.

In the implementation I looked at, the thread stack allocation was handled by the standard C native thread library, and it looked like the library was going to the OS to allocate a memory segment for the stack. So "none of the above".

You can confirm this by delving into the OpenJDK source code relevant to your platform.

UPDATE

Из старого вопроса, вот фрагмент кода изpthread_create который запрашивает выделение стека потока. Этот методused реализацией потока JVM для создания собственного потока.

 mmap(0, attr.__stacksize, 
     PROT_READ|PROT_WRITE|PROT_EXEC, 
     MAP_PRIVATE|MAP_ANONYMOUS, -1, 0)

Как видите, он просто используетmmap системный вызов для запроса сегмента памяти из операционной системы. Как я сказал в комментарии, это НЕ обычная куча Java, НЕ куча Permgen и НЕ собственная куча Си. Это сегмент памяти, специально запрашиваемый у операционной системы.

Для ссылки здесь ссылка наРучной ввод в системный вызов mmap.

update: another reference info: For a 64-bit VM, the C-Heap capacity = Physical server total RAM & virtual memory – Java Heap - PermGen

ИМО, это упрощение. (И, пожалуйста, предоставьте ссылку, где вы нашли эту информацию ... чтобы мы могли прочитать ее в оригинальном виде.)

если так. Могу ли я подумать, что Java-поток будет размещен в собственной куче? Благодаря куче JVM и пространству PermGen было использовано для специального использования. jiafu
Мне это интересно. ничего из этого. где это? jiafu
@jiafu - ты можешь думать, что хочешь. Однако у меня нет никаких доказательств того, что вы говорите. Как я уже сказал в своем ответе, в случае, когда я посмотрел, стек потоков НЕ размещается в обычной куче, НЕ размещается в permgen и НЕ размещается в собственной куче Си.
Вы также не можете думать об этом, это деталь реализации.
Большое спасибо Вам! ха-ха jiafu
2

второе Sun (или Oracle, которым он сейчас занимается?) Быстро выпустит патч.

Возможность получить доступ к таким вещам - ОГРОМНАЯ угроза безопасности. Многие системы для крупных компаний используют Java. Выйти из дыры, где можно отследить место выделения, было бы невозможно.

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

Возможно, из-за того, что я думаю о том, как что-то можно использовать (чтобы лучше защитить мои системы), немного темнее, я уверен, что будет исправление, чтобы отменить вашу работу, или у вас есть полиция World America Team, стучащая в вашу дверь, подозревающую вас нечестных действий, и в процессе захватить все ваше оборудование.

Похожие вопросы