Cómo maneja la máquina virtual Java la invocación y devolución de métodos

Under The Hood de este mes se centra en la invocación y devolución de métodos dentro de la máquina virtual Java (JVM). Describe las cuatro formas en que se pueden invocar los métodos Java (y nativos), proporciona un ejemplo de código que ilustra las cuatro formas y cubre los códigos de bytes relevantes.

Invocación de método

El lenguaje de programación Java proporciona dos tipos básicos de métodos: métodos de instancia y métodos de clase (o estáticos). La diferencia entre estos dos tipos de métodos es:

  1. InstanceLos métodos requieren una instancia antes de poder ser invocados, mientras que los classmétodos no.
  2. Instancelos métodos utilizan un enlace dinámico (tardío), mientras que los classmétodos utilizan un enlace estático (temprano).

Cuando la máquina virtual Java invoca un método de clase, selecciona el método a invocar en función del tipo de referencia del objeto, que siempre se conoce en tiempo de compilación. Por otro lado, cuando la máquina virtual invoca un método de instancia, selecciona el método a invocar en función de la clase real del objeto, que solo puede conocerse en tiempo de ejecución.

La JVM utiliza dos instrucciones diferentes, que se muestran en la siguiente tabla, para invocar estos dos tipos diferentes de métodos: invokevirtual para instancemétodos e invokevirtual para classmétodos.