Если оба присутствуют в основной памяти, то почему говорят, что стековая память проще для доступа
Есть скорость доступа и скорость выделения. Распределение стека (как в alloca
) происходит быстро, потому что нет необходимости искать неиспользуемый блок памяти. Но Java не разрешает выделение стека, если вы не учитываете выделение новых кадров стека.
Быстрый доступ к памяти стека, поскольку она имеет тенденцию кешироваться. Мало того, что местные жители находятся рядом друг с другом, они также хранятся очень компактно.
и почему мы не можем размещать объекты в памяти стека?
Это было бы полезно, но опасно. Пользователь может выделить объект в стеке, создать ссылки на него из постоянных объектов, а затем попытаться получить доступ к объекту после того, как исчезнет соответствующий кадр стека.
Безопасно хранить примитивы в стеке, потому что мы не можем создавать ссылки на них из других источников.
Так как классы хранятся в PermGen, где это место выделено и чем оно отличается от пространства кучи и где хранятся постоянные строки?
PermGen - это просто еще одно пространство кучи. Строковые литералы хранятся в литеральном пуле, который является просто таблицей в памяти, которая выделяется при загрузке класса.