Подтвердить что ты не робот

Где выделен стек Java?

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

  • Куча Java
  • Пространство PermGen (постоянное поколение)
  • Родная куча (C-куча)

Где находится стек, выделенный в JSM hotSpot? В родной куче?

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

4b9b3361

Ответ 1

Ответ:

  • Это зависит от реализации.

  • В реализации, на которую я смотрел, распределение стека потоков было обработано стандартной библиотекой потоков C, и похоже, что библиотека собиралась в ОС для выделения сегмента памяти для стека. Итак, "ни одно из вышеперечисленных".

  • Вы можете подтвердить это, вдаваясь в исходный код OpenJDK, относящийся к вашей платформе.

UPDATE

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

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

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

Для справки, здесь ссылка на mmap syscall ручную запись.


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

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

Ответ 2

Если вы можете найти доступ к этим вещам любым способом, то второе Sun (или Oracle, которое сейчас является adays?) быстро удалит патч.

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

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

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