Ответ 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, это упрощение. (И, пожалуйста, укажите ссылку, где вы нашли эту информацию... чтобы мы могли прочитать ее в ее первоначальной форме.)