Java仮想マシンがメソッドの呼び出しと戻りを処理する方法

今月のUnderThe Hoodは、Java仮想マシン(JVM)内でのメソッドの呼び出しと戻りに焦点を当てています。Java(およびネイティブ)メソッドを呼び出すことができる4つの方法について説明し、4つの方法を説明するコードサンプルを提供し、関連するバイトコードについて説明します。

メソッド呼び出し

Javaプログラミング言語は、インスタンスメソッドとクラス(または静的)メソッドの2つの基本的な種類のメソッドを提供します。これら2種類の方法の違いは次のとおりです。

  1. Instanceメソッドは呼び出す前にインスタンスを必要としますが、メソッドは必要ありclassません。
  2. Instanceメソッドは動的(遅延)バインディングをclass使用しますが、メソッドは静的(早期)バインディングを使用します。

Java仮想マシンがクラスメソッドを呼び出すと、オブジェクト参照のタイプに基づいて呼び出すメソッドが選択されます。これは、コンパイル時に常に認識されます。一方、仮想マシンがインスタンスメソッドを呼び出すと、オブジェクトの実際のクラスに基づいて呼び出すメソッドが選択されます。これは、実行時にのみ認識される場合があります。

JVMは、次の表に示す2つの異なる命令を使用して、これら2つの異なる種類のメソッドを呼び出します。メソッドのinvokevirtualinstanceメソッドのinvokestaticですclass