2012-01-04 13 views
6

Semanticamente, la VM Dalvik ha un nuovo set di registri per ogni metodo e non ha istruzioni per accedere allo stack di chiamate. Ma in termini di implementazione, i registri dovrebbero essere salvati in qualche modo sulle chiamate ai metodi e ripristinati sui ritorni dei metodi. Come fa la (implementazione di Google) di Dalvik a fare questo?In che modo il Dalvik VM salva e ripristina i suoi registri tra le chiamate di metodo?

+0

La fonte per l'implementazione di Google Dalvik è accessibile? Inoltre, c'è una differenza tra il * byte-code * di Dalvik che non ha accesso a uno "stack di chiamate" e l'* implementazione * che esegue tale codice byte non avendo tale accesso. (Deve * avere un modo di mantenere lo stato, guarda i contratti per le chiamate di metodi come inizio ;-) –

+0

Sposta semplicemente il contesto precedente sul suo stack di chiamate interno quando viene immesso un metodo e lo fa scattare quando si esce da un metodo . –

+0

@pst: Android è open source, ovviamente la fonte è accessibile :) – JesusFreke

risposta

1

Qui è il repository di origine per dalvik, è possibile effettuare il walkthrough per l'implementazione di findout. android source

3

I registri a cui si riferisce il bytecode dalvik non sono affatto registri macchina, ma in realtà sono posizioni nello stack di chiamate. Ogniqualvolta si chiama in un metodo, dalvik alloca memoria sufficiente sul frame dello stack di quel metodo per contenere tutti i registri necessari a tale metodo.

Si noti che non tutti i calcoli modificheranno immediatamente il valore sullo stack, il vm ovviamente deve caricare i valori in un registro macchina per eseguire i calcoli. I risultati possono essere conservati in un registro macchina per essere utilizzati in un secondo momento senza doverli immediatamente riscrivere nella posizione dello stack corrispondente, a discrezione della VM. I valori verranno risciacquati allo stack di chiamate se e quando è necessario (ad esempio quando si chiama in un altro metodo, utilizzare vari costrutti di sincronizzazione o è necessario il registro per un altro calcolo, ecc.).