i dettagli sono nella realizzazione (non le specifiche). Tuttavia, le implementazioni seguono generalmente un modello molto semplice. La maggior parte del layout della memoria in Java è molto semplice e diretta. La mia terminologia potrebbe non corrispondere alla terminologia Java, dal momento che non eseguo molta programmazione Java.
In generale, un oggetto inizia con un puntatore al suo vtable e quindi ha un gruppo di campi che seguono. I campi sono tipi primitivi (int/bool/float) o puntatori agli oggetti. Questo è tutto per gli oggetti. (Anche le classi sono oggetti.) I puntatori nulli sono come C, non sono validi, non come Python, dove Nessuno è un oggetto.
In una classe interna, è presente un campo nascosto aggiuntivo che punta a un'istanza della classe esterna. Questo è il modo in cui le classi interne accedono ai dati nella classe esterna. Le classi anonime funzionano allo stesso modo. I metodi statici sono solo metodi sulla classe anziché metodi sull'istanza.
Il vtable è dove avviene tutta la magia. Ogni classe ha il suo vtable condiviso tra tutti gli oggetti. Il vtable ha informazioni sulla classe come la dimensione delle sue istanze e come sono disposti i campi. Questa informazione è usata dal garbage collector. Il vtable ha anche un puntatore a tutti i metodi implementati dalla classe. Quando si chiama un metodo, il runtime estrae prima il puntatore vtable dall'oggetto, quindi estrae il puntatore del metodo dal vtable, quindi chiama il metodo e passa l'oggetto al metodo come parametro implicito. È simile al C++, ma molto più semplice da implementare. Il processo può essere saltato se il metodo o la classe è "finale".
So che Java non ha veramente "puntatori", ha "maniglie simboliche" o somesuch, ma le implementazioni comuni basta usare vecchie puntatori semplici.
fonte
2010-01-30 23:41:29
Il "come" è un dettaglio di implementazione, non spec definito. Detto questo, questo libro non ti dice come effettivamente l'implementazione Java lo fa, ma ti dice come una VM simile a Java potrebbe farlo: http://www1.idc.ac.il/tecs/ – Dinah