C++, birden çok kalıtım var. Montaj seviyesinde çoklu kalıtımın uygulanması oldukça karmaşık olabilir, ancak bunun normal olarak nasıl yapıldığına dair online () vardır (vtables, pointer fixups, thunks, etc.).Java arabirimleri dahili olarak nasıl uygulanır? (vtables?)
Java'nın birden fazla uygulama devralma özelliği yoktur, ancak birden fazla arabirim kalıtımına sahiptir, bu yüzden bunu uygulayabilen, sınıf başına tek bir vtable ile doğrudan bir uygulama düşünemiyorum. Java dahili olarak arayüzleri nasıl uygular?
C++ uygulamasının aksine, Java'nın Jit derlenmiş olduğunu, dolayısıyla farklı kod parçalarının farklı şekilde optimize edilebileceğini ve farklı JVM'lerin farklı şeyler yapabileceğini anlıyorum. Öyleyse, birçok JVM'nin bunu takip ettiği veya belirli bir JVM'de uygulamayı bilen herhangi bir genel strateji var mı?
Ayrıca, JVM'ler genellikle vekil veya eşdeğer bir yöntem bulunmadığı yöntem çağrılarını devirtualize eder ve satır içi satır içi çağrıları gerçekleştirir, bu nedenle sanal/arabirim yöntem çağrılarını gerçekleştiren asıl montaj sıraları hakkında soru sormak mantıklı olmayabilir, ancak en fazla JVM'ler, her şeyi devşiremedikleri takdirde, kullanacakları sınıfların genel bir temsilini hala sürdürürler. Bu varsayım yanlış mı? Bu temsil bir C++ vtable gibi görünüyor mu? Öyleyse arayüzler ayrı veteriner var ve bunlar sınıf vtables ile bağlantılı nasıl? Öyleyse, nesneler C++'daki nesne örnekleri gibi birden fazla vtable işaretçisine (sınıf/arabirim vtables'e) sahip olabilir mi? Aynı nesneye bir sınıf tipi ve bir arabirim türü referansları her zaman aynı ikili değere sahiptir veya bunlar C++'da işaretçinin düzeltmeleri gerektirdiği gibi farklı olabilir mi?
(referans için: this question CLR hakkında benzer bir şey sorar, ve ben Java için benzer bir şey bulmak mümkün olmamıştır artık eski olabilir ama this msdn article iyi bir açıklaması vardır görünür..)Düzenleme: Ben Java sınıfı ArrayList" anlamında "GCC derleyicisi tamsayı ekleme/fonksiyon çağrıları/vb uyguluyor mu Nasıl" anlamında 'uygular' demek
- Liste arabirimini uygulayan ".
- Bunun JVM bayt kodu düzeyinde nasıl çalıştığının farkındayım, bilmek istediğim, sınıf dosyalarını yükledikten ve bayt kodunu derledikten sonra JVM tarafından hangi tür kod ve veri yapılarının oluşturulduğunu açıklıyor.
Arabirim devralma ve uygulama kalıtımından bahsediyorsunuz. Tanımlanmış bir arama düzenine sahip olmanız gerektiğinden uygulama kalıtımını zorlaştırır. Arayüz kalıtımı daha basittir. Uygulanması gereken tüm yöntem imzaları ile bir haritanız var. Hiçbir arama emri gerektirmez (eklenmiş bir uygulama olmadığı için). Orada sipariş yok. – extraneon