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». Мой вопрос заключается в том, чтобы понять, получает ли конструктор стековый фрейм, выделенный точно так же, как другие методы, поскольку создание объекта не завершено, пока конструктор не вернется. Надеюсь, это проясняет.