Allora faccio una domanda per vedere se ho capito di cosa si sta parlando.

Nello heap c'è tutto ciò che preesiste all'esecuzione del programma: tutto ciò che è statico per esempio.

Nell'esempio precedente, a, b e d, essendo variabili d'istanza, vengono salvate sullo stack nel momento in cui viene creato mediante new un oggetto di tipo MiaClasse.
Ovvero, se sto nel main, con l'istruzione

MiaClasse myClass = new MiaClasse ();

creo nello stack una variabile di tipo reference chiamata myClass che punta ad un oggetto di tipo MiaClasse.

Sbaglio?