Задать вопрос

Почему в Java нет памяти типа stack?

Вопрос от C++-ника изучающего Java.


Почему в Java все объекты создаются только в heap и нет памяти типа stack? Это обусловлено только философией Java по уменьшению сложности для разработчика за счёт уменьшения эффективности решений с точки зрения машины? Какие проблемы, кроме переполнения стека, решаются отказом от более быстрого типа памяти stack? Или проблемы переполнения оказалось достаточно для принятия такого решения?
  • Вопрос задан
  • 5858 просмотров
Подписаться 2 Оценить 1 комментарий
Решения вопроса 1
knekrasov
@knekrasov
Судя по всему, ваш вопрос стоит понимать так:
Почему объекты в Java нельзя создать на стеке?

На мой взгляд, основная причина этого шага — упразднение указателей из языка и единообразная схема работы с памятью (gc).

PS кстати, если бы стека и правда не было, то выполнять вложенные вызовы методов вы бы не могли.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 5
barker
@barker
Непонятно что Вы спросили. О каком ещё стеке речь? В java на уровне байткода есть стек и активно используется. А если на уровень языка подняться, то и тут в c++ всё точно так же, вроде. Но тогда тем более непонятно, причём тут «сложность для разработчика», если с этой т.з. стек совершенно прозрачен. Поясните в каком именно аспекте имеются ввиду различия? В java строго говоря нельзя сказать, что объекты «создаются только в heap», всё несколько сложнее (ввиду gc в том числе), в том числе тут на хабре были заметки о модели памяти в java.
Ответ написан
@1nd1go
Ответ написан
Комментировать
Zorkus
@Zorkus
По моему, все примитивные типы и их врапперы, по крайней мере локальные в пределах методов, в яве выделяются в стеке текущего потока.

Но совершенно точно, JVM активно использует внутри стек для размещения объектов.
Ответ написан
Комментировать
Zorkus
@Zorkus
Тут основной момент такой- стек, это же вещь локальная для конкретного потока, потому в сложных приложениях выделять много памяти на стеке из одного потока вряд ли имеет смысла.

Тем более, дефолтный размер стека для одного потока в Java небольшой, 512кб по умолчанию.
Ответ написан
Комментировать
mark_ablov
@mark_ablov
Java-код исполняется на собственной виртуальной машине.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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