İnvokeinterface anlamı nedir?
JVM yöntemleri çağırır hakkında this article okuyorum ve çoğunu anladım sanırım. Ancak, hala sorun invokeinterface
ihtiyacını anlamakta güçlük çekiyorum.
Bu şekilde anlıyorum, bir sınıf yöntemleri temelde sanal bir masa ve iki invokevirtual
invokeinterface
bir yöntem çağrılırken bu sanal tablo sorulduğunda.
Fark, o zaman, bir network üzerinde tanımlanan bir metod ve Yöntem, temel sınıf üzerinde tanımlı arasındaki nedir? Neden farklı bytecodes?
description of the instructions de çok benzer görünüyor.
Bu makalede, bir arabirim yöntemi tablo "farklı uzaklıklar" her zaman bir yöntem olarak adlandırılır. sahip olduğunu iddia ediyor Benim anlamadığım bir arayüz hiçbir nesnenin gerçek türü arabirimi olabilir, çünkü yöntem bir tablo var, neden.
Neyi kaçırıyorum?
CEVAP
Her bir Java sınıfı ile ilişkilidirsanal bir yöntem tablo"bir sınıfın her yöntemi bayt kodu. bağlantılar içerir Bu tablo, belirli bir sınıfın üst sınıftan miras ve hatta bir kaç yeni yöntemleri bakımından genişletilir. E. g.,
class BaseClass {
public void method1() { }
public void method2() { }
public void method3() { }
}
class NextClass extends BaseClass {
public void method2() { } // overridden from BaseClass
public void method4() { }
}
tablolardaki sonuçlar
BaseClass 1. BaseClass/method1() 2. BaseClass/method2() 3. BaseClass/method3() NextClass 1. BaseClass/method1() 2. NextClass/method2() 3. BaseClass/method3() 4. NextClass/method4()
Not NextClass
sanal yöntem tablo BaseClass
tablo girişlerin sırası nasıl korur ve sadece yazar, "link" geçersiz kılan method2()
.
Bir uygulama JVM böylece optimize çağrısı invokevirtual
hatırlamak BaseClass/method3()
daima yanında olacağım üçüncü girişi sanal bir yöntem tablonun herhangi bir nesne bu yöntemi asla çağrılabilir.
invokeinterface
ile bu optimizasyon mümkün değildir. E. g.,
interface MyInterface {
void ifaceMethod();
}
class AnotherClass extends NextClass implements MyInterface {
public void method4() { } // overridden from NextClass
public void ifaceMethod() { }
}
class MyClass implements MyInterface {
public void method5() { }
public void ifaceMethod() { }
}
Bu sınıf, hiyerarşi sanal bir yöntem tablolardaki sonuçlar
AnotherClass 1. BaseClass/method1() 2. NextClass/method2() 3. BaseClass/method3() 4. AnotherClass/method4() 5. MyInterface/ifaceMethod() MyClass 1. MyClass/method5() 2. MyInterface/ifaceMethod()
, AnotherClass
beşinci giriş arabirim yöntemi içerir ve MyClass
ikinci giriş içerir. Aslında doğru girişi bulmak için bu sanal bir yöntem masa, bir telefon için bir yöntem ile invokeinterface
Her zaman için arama tamamlamak tabloda olmayan bir şans için stil optimizasyonu invokevirtual
yapar.
invokeinterface
birlikte aslında arabirimini uygulayan nesne referansları ile kullanılabilir olması gibi ek farklar vardır. Bu nedenle, invokeinterface
bir yöntem tabloda var olup olmadığını zamanı kontrol edecek ve olası bir durum. Eğer daha derin bir konuya dalmak isterseniz, örneğin, "Efficient Implementation of Java Interfaces: Invokeinterface Considered Harmless" öneririm.
Anlamı `X` vs `X yapı typedef typedef ...
Zamanı tam olarak anlamı nedir.() getR...
Perl @_ anlamı nedir?...
&Quot;Çalıştır" R yardım sayfalar...
&Quot anlamı nedir;$" javascript ...