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