Java: рекурсивный вызов конструктора и ошибка stackoverflow

Пожалуйста, помогите понять, почему следующий код

public class HeapQn1 {

    /**
     * @param args
     */
    public HeapQn1() {
        new HeapQn1();
    }

    static HeapQn1 n = new HeapQn1();

    public static void main(String[] args) {

    }

}

результаты в

java.lang.StackOverflowError
    at com.rg.test.interview.HeapQn1.<init>(HeapQn1.java:8)
    at com.rg.test.interview.HeapQn1.<init>(HeapQn1.java:9)
    ...

Согласно моему пониманию, выделение памяти для объекта происходит в динамической памяти, и я ожидал OutOfMemoryError, так как в какой-то момент динамическая память будет заполнена из-за повторяющегося создания объекта.

В ходе исследования я обнаружил, что Java-конструктор считается методом, и это объясняет StackOverflowError, пока я не прочитал следующую ветку.

Когда конструктор вызывается в Java?

который говорит

3. The object is fully constructed/created when the constructor returns.

Из того, что я мог бы узнать, конструктор является методом, и, поскольку кучная память намного больше, чем стековая память, рекурсивный вызов конструктора привел к StackOverflowError. Это правильно ?

Поскольку ни один объект в данном коде не будет полностью создан, произойдет ли выделение стека для конструктора?

--edit-- Для указанных дубликатов я понимаю, что такое StackoverflowError. Я упомянул в вопросе «Об исследованиях, я обнаружил, что Java-конструктор считается методом, и это объясняет StackOverflowError». Мой вопрос заключается в том, чтобы понять, получает ли конструктор стековый фрейм, выделенный точно так же, как другие методы, поскольку создание объекта не завершено, пока конструктор не вернется. Надеюсь, это проясняет.

Ответы на вопрос(5)

Ваш ответ на вопрос