In che modo la Java virtual machine gestisce la chiamata e la restituzione del metodo

Under The Hood di questo mese si concentra sull'invocazione del metodo e sul ritorno all'interno della Java virtual machine (JVM). Descrive i quattro modi in cui i metodi Java (e nativi) possono essere invocati, fornisce un esempio di codice che illustra i quattro modi e copre i bytecode pertinenti.

Invocazione del metodo

Il linguaggio di programmazione Java fornisce due tipi fondamentali di metodi: metodi di istanza e metodi di classe (o statici). La differenza tra questi due tipi di metodi è:

  1. Instancei metodi richiedono un'istanza prima di poter essere richiamati, mentre i classmetodi no.
  2. Instancei metodi utilizzano l'associazione dinamica (tardiva), mentre i classmetodi utilizzano l'associazione statica (anticipata).

Quando la Java virtual machine richiama un metodo di classe, seleziona il metodo da richiamare in base al tipo di riferimento all'oggetto, che è sempre noto in fase di compilazione. D'altra parte, quando la macchina virtuale richiama un metodo di istanza, seleziona il metodo da invocare in base alla classe effettiva dell'oggetto, che può essere nota solo in fase di esecuzione.

La JVM utilizza due diverse istruzioni, mostrate nella tabella seguente, per richiamare questi due diversi tipi di metodi: invokevirtual per i instancemetodi e invokestatic per i classmetodi.