В книге компилятора (Книга драконов) объясняется, что типы значений создаются в стеке, а ссылочные типы создаются в куче.
Для Java JVM также содержит кучу и стек в области данных времени выполнения. Объекты и массивы создаются в куче, кадры метода переносятся в стек. Одна куча разделяется всеми потоками, в то время как каждый поток имеет свой собственный стек. Следующая диаграмма показывает это:
Подробнее о Области времени выполнения Java во время.
Что я не понимаю, так это то, что, поскольку JVM по существу является программным обеспечением, как эти кучи JVM, стек и потоки отображаются на физическую машину?
Я был бы признателен, если бы кто-то смог сравнить эту концепцию между Java и С++. Потому что Java работает на JVM, но С++ этого не делает.
Чтобы уточнить этот вопрос, я хочу знать следующее:
- Сравнение с Java, какова область данных времени выполнения С++? Изображение было бы полезно, я не могу найти хорошую картинку, такую как JVM, которая была выше.
- Как куча, стек, регистры и потоки JVM отображаются в операционную систему? или я должен спросить, как они сопоставляются с физической машиной?
- Правда ли, что каждый потоки JVM - это просто пользовательский поток и каким-то образом сопоставляется с ядром? (поток пользователя vs поток ядра)
Обновление: Я рисую изображение для физической памяти процесса.