Programmering

Hvordan den virtuelle Java-maskine håndterer metodeopkald og -retur

Denne måned er Under kølerhjelmen fokuserer på metodeopkald og returnering inde i den virtuelle Java-maskine (JVM). Den beskriver de fire måder, hvorpå Java (og native) metoder kan påberåbes, giver en kodeeksempel, der illustrerer de fire måder, og dækker de relevante bytekoder.

Metodeindkaldelse

Java-programmeringssproget giver to grundlæggende slags metoder: instansmetoder og klassemetoder (eller statiske). Forskellen mellem disse to slags metoder er:

  1. Instans metoder kræver en instans, inden de kan påberåbes, mens klasse metoder ikke.
  2. Instans metoder bruger dynamisk (sen) binding, hvorimod klasse metoder bruger statisk (tidlig) binding.

Når den virtuelle Java-maskine påberåber en klassemetode, vælger den metoden, der skal påberåbes, baseret på typen af ​​objektreference, som altid er kendt på kompileringstidspunktet. På den anden side, når den virtuelle maskine påberåber sig en instansmetode, vælger den metoden, der skal påberåbes baseret på objektets faktiske klasse, som muligvis kun er kendt på kørselstidspunktet.

JVM bruger to forskellige instruktioner, vist i den følgende tabel, for at påberåbe sig disse to forskellige slags metoder: invokevirtual til eksempel metoder og invokestatiske til klasse metoder.