Ho esaminato i diversi thread e ci sono molte informazioni contrastanti là fuori. L'articolo più utile che ho trovato è stato questo: teoria e pratica Java: leggende sul rendimento urbano, rivisitate ma è del 2005.
Quindi mi chiedevo quale sia lo stato dello standard Java per quanto riguarda l'allocazione dell'heap. Nelle note di rilascio per Java 7 dice:
(The server compiler) does not replace a heap allocation with a stack allocation for non-globally escaping objects.
Ho avuto l'impressione dall'altro articolo che questo è effettivamente possibile fare nel compilatore, ma sembra non essere richiesto dallo standard.
Una domanda correlata che non sembra rispondere alla mia domanda è Stack e Memoria heap in Java La risposta accettata per questa domanda dice che solo le primitive possono essere messe in pila. Non sembra esserci alcun consenso al riguardo. In secondo luogo, sto ovviamente facendo una domanda diversa.
Capisco che in Java tutto è un riferimento. Detto questo, un compilatore alloca tutto sull'heap anche se è raggiungibile solo da un riferimento stack?