Comment la machine virtuelle Java gère l'appel et le retour de méthode

Under The Hood de ce mois-ci se concentre sur l'invocation de méthode et le retour dans la machine virtuelle Java (JVM). Il décrit les quatre façons dont les méthodes Java (et natives) peuvent être appelées, donne un exemple de code qui illustre les quatre façons et couvre les bytecodes pertinents.

Invocation de méthode

Le langage de programmation Java fournit deux types de méthodes de base: les méthodes d'instance et les méthodes de classe (ou statiques). La différence entre ces deux types de méthodes est:

  1. Instanceles méthodes nécessitent une instance avant de pouvoir être appelées, contrairement aux classméthodes.
  2. InstanceLes méthodes utilisent une liaison dynamique (tardive), tandis que les classméthodes utilisent une liaison statique (précoce).

Lorsque la machine virtuelle Java appelle une méthode de classe, elle sélectionne la méthode à appeler en fonction du type de la référence d'objet, qui est toujours connue au moment de la compilation. En revanche, lorsque la machine virtuelle appelle une méthode d'instance, elle sélectionne la méthode à invoquer en fonction de la classe réelle de l'objet, qui ne peut être connue qu'au moment de l'exécution.

La machine virtuelle Java utilise deux instructions différentes, présentées dans le tableau suivant, pour appeler ces deux types de méthodes: invokevirtual pour les instanceméthodes et invokestatic pour les classméthodes.