Programmering

Hvordan den virtuelle Java-maskinen håndterer metodeinnkalling og retur

Denne månedens Under panseret fokuserer på metodeinnkalling og retur i Java virtual machine (JVM). Den beskriver de fire måtene Java (og native) metoder kan påberopes, gir en kodeeksempel som illustrerer de fire måtene, og dekker de relevante bytekodene.

Metodeinnkallelse

Java-programmeringsspråket gir to grunnleggende typer metoder: forekomstmetoder og klassemetoder (eller statiske). Forskjellen mellom disse to typene metoder er:

  1. Forekomst metoder krever en forekomst før de kan påberopes, mens klasse metoder ikke.
  2. Forekomst metoder bruker dynamisk (sen) binding, mens klasse metoder bruker statisk (tidlig) binding.

Når den virtuelle Java-maskinen påkaller en klassemetode, velger den metoden som skal påkalles basert på typen objektreferanse, som alltid er kjent på kompileringstidspunktet. På den annen side, når den virtuelle maskinen påkaller en forekomstmetode, velger den metoden som skal påkalles basert på den faktiske klassen til objektet, som kanskje bare er kjent på kjøretid.

JVM bruker to forskjellige instruksjoner, vist i tabellen nedenfor, for å påkalle disse to forskjellige typer metoder: invokevirtual til forekomst metoder, og invokestatiske til klasse metoder.

$config[zx-auto] not found$config[zx-overlay] not found