Что хранится в стеке и в куче в Java
Что проверяют
Вопрос про Java достаётся мобильному разработчику, когда в продукте есть общая с Android часть или когда проверяют базу вне зависимости от платформы. Смотрят не на определения, а на то, понимаете ли вы, где живут данные и что из этого следует: время жизни, стоимость доступа, кто убирает мусор. Умение перевести ответ на свою платформу тут плюс, а не уход от темы.
Как отвечать
Стек принадлежит потоку: у каждого свой, и в нём лежат фреймы вызовов. Во фрейме локальные переменные метода, аргументы, адрес возврата и промежуточные значения вычислений. Примитив, объявленный внутри метода, лежит прямо там, объект не лежит, лежит ссылка на него.
Куча одна на всю виртуальную машину и общая для потоков. В ней объекты и массивы вместе со всеми полями, включая примитивные: int, объявленный полем класса, живёт в куче внутри объекта, а не в стеке. Там же пул строк. Метаданные классов вынесены в отдельную область вне кучи.
Дальше стоит назвать следствия. Фрейм освобождается возвратом из метода, поэтому за стек сборщик мусора не отвечает, зато глубина ограничена и бесконечная рекурсия даёт переполнение. Объект в куче живёт, пока на него есть достижимая ссылка. Само выделение в куче дешёвое, почти сдвиг указателя в буфере потока: платим мы за сборку, а не за выделение.
Хорошо закончить мостиком к своей платформе: в Swift те же две области, но освобождение считает подсчёт ссылок, а не сборщик, и граница проходит иначе, по значимым и ссылочным типам.
Где спотыкаются
Говорят «примитивы в стеке, объекты в куче» и не делают оговорки про поля. Поле примитивного типа уходит в кучу вместе с объектом, и путаница вылезает сразу, как только спросят про массив целых чисел.
Уверяют, что выделение в куче медленное. Медленной её делают сборка и промахи кеша, а само выделение в современных виртуальных машинах обходится в несколько инструкций.
Считают границу жёсткой. Оптимизатор умеет разобрать объект, не покидающий метод, на отдельные значения и не выделять его в куче вовсе, поэтому обещание «здесь точно будет выделение» звучит наивно.