Wie die Java Virtual Machine den Methodenaufruf und die Rückgabe behandelt

In diesem Monat konzentriert sich Under The Hood auf den Aufruf und die Rückgabe von Methoden innerhalb der Java Virtual Machine (JVM). Es beschreibt die vier Möglichkeiten, wie Java- (und native) Methoden aufgerufen werden können, gibt ein Codebeispiel, das die vier Möglichkeiten veranschaulicht, und deckt die relevanten Bytecodes ab.

Methodenaufruf

Die Programmiersprache Java bietet zwei grundlegende Arten von Methoden: Instanzmethoden und Klassenmethoden (oder statische Methoden). Der Unterschied zwischen diesen beiden Arten von Methoden ist:

  1. InstanceMethoden erfordern eine Instanz, bevor sie aufgerufen werden können, classMethoden jedoch nicht.
  2. InstanceMethoden verwenden dynamische (späte) Bindung, während classMethoden statische (frühe) Bindung verwenden.

Wenn die Java Virtual Machine eine Klassenmethode aufruft, wählt sie die aufzurufende Methode basierend auf dem Typ der Objektreferenz aus, der zur Kompilierungszeit immer bekannt ist. Wenn die virtuelle Maschine andererseits eine Instanzmethode aufruft, wählt sie die aufzurufende Methode basierend auf der tatsächlichen Klasse des Objekts aus, die möglicherweise nur zur Laufzeit bekannt ist.

Die JVM verwendet zwei verschiedene Anweisungen, die in der folgenden Tabelle aufgeführt sind, um diese beiden verschiedenen Arten von Methoden aufzurufen : invokevirtual für instanceMethoden und invokestatic für classMethoden.