Dipende interamente dalla VM.
La JVM ha un singolo impilare per tutto. (Più precisamente: uno stack singolo per thread per tutto.)
Il Dalvik VM è basato su registri, ha solo uno stack di chiamate, tutti i dati sono conservati in registri.
La Parrot VM non ha stack: è basata sui registri, cioè tutti i dati sono contenuti nei registri e il suo flusso di controllo è basato su continuazioni, quindi non ha nemmeno uno stack di chiamate.
Ci sono anche macchine virtuali che concettualmente hanno uno stack ma in realtà allocano tutti gli stackframes come oggetti normali nell'heap. Quindi, dal punto dell'insieme di istruzioni, c'è uno stack, ma nell'implementazione effettiva non c'è. (La specifica JVM, ad esempio, consente questo. Non c'è nulla in esso, che ti ti costringa ad avere una singola area contigua di memoria per il tuo stack.Infatti, la esplicitamente > em> menziona che essi non specificano tale livello di dettaglio e persino menziona l'allocazione di frame di stack sull'heap come esempio.)
Molte macchine virtuali Smalltalk e Lisp hanno uno " stack di spaghetti ", necessario per supportare call/cc
, poiché può concettualmente "forgiare" lo stack di chiamate.
Forth ha due stack: uno stack di indirizzi di ritorno per il flusso di controllo e uno stack di dati. Entrambe le pile possono essere liberamente manipolate dal programmatore.