Wygląda na to, że openJDK 8 umieszcza prywatne metody, które nie są final
ani static
w vtable. Dlaczego tak jest, gdy wiązanie dynamiczne nie jest używane w metodach prywatnych (ponieważ są one wywoływane za pomocą invokespecial) lub są używane?Dlaczego OpenJDK umieszcza prywatne metody w vtable?
Odpowiedz
Służy to rozwiązywaniu rzadkich sytuacji, gdy w nadklasie istnieje nadpisywalna metoda o tej samej nazwie i sygnaturze. Choć nie jest to z pewnością miejsce dla poprawy, może być ukierunkowane na JDK 9.
Zobacz https://bugs.openjdk.java.net/browse/JDK-8024368
metody prywatne zawsze uzyskać wpis do obsługi vtable wsteczną kompatybilność z klasach - czyli można mieć takie same Nazwa prywatnej metody lokalnej dla Twojej klasy, a także odziedzicz metodę nadrzędną od , która zostanie odziedziczona po Twoim prywatnym dziecku metodą prywatną, .
Tak więc, gdy metoda prywatna jest nazywana, jej wpis vtable nigdy nie jest używany? –
@RadekMicek Dobrze, ten wpis nie jest używany w wywołaniach metod. – apangin
Myślałem, że to w kółko i nadal nie rozumiem. Po pierwsze, nie wiem, które rzeczywiste zachowanie powinno zostać osiągnięte, a po drugie, każde możliwe zachowanie, które mogę sobie wyobrazić, może zostać zaimplementowane bez dodawania "prywatnych" metod do vTable. – Holger
- 1. Dlaczego metody antlr3 C# parser są prywatne?
- 2. F # Prywatne metody statyczne
- 3. Twórz metody delegowane prywatne
- 4. Dlaczego prywatne metody pomocnicze są nadal dostępne w widokach?
- 5. Dlaczego Resharper chce wielbłąda-case także prywatne metody?
- 6. Jak znaleźć prywatne metody singleton
- 7. Jak mogę przetestować prywatne metody w Rust?
- 8. Dlaczego vtable nie może zawierać duplikatów funkcji?
- 9. Interfejs vtable
- 10. Dlaczego DockPanel.Dock = "Bottom" umieszcza element na górze?
- 11. Dlaczego warto zastąpić prywatne dziedziczenie?
- 12. Czy można stosować prywatne metody przedłużania?
- 13. Java: jak zaimplementować prywatne abstrakcyjne metody?
- 14. Czy przeciążalność należy wybrać Metody prywatne?
- 15. Fałszywe nieużywane metody "prywatne" powinny zostać usunięte.
- 16. Co jest vtable w C++
- 17. Jak wyśmiewać prywatne metody w kontrolerze w grails 2.2.4
- 18. Implementacja OpenJDK System.arraycopy
- 19. zmiany długości tablicy w openjdk
- 20. C++ Brakujący błąd vtable
- 21. Mieć prywatne właściwości i metody w klasach ES6
- 22. Jak zdefiniować prywatne lub wewnętrzne metody w Perlu zorientowanym obiektowo?
- 23. Metody tworzenia instancji jako prywatne w środowisku wykonawczym
- 24. niezdefiniowana odniesienia do `vtable dla szablonu
- 25. Zrozumienie tabeli vtable w klasach pochodnych
- 26. Interfejsy prywatne
- 27. OpenJDK - gotowy do produkcji?
- 28. guava: dlaczego metody create() zamiast konstruktora?
- 29. Google umieszcza klucz Api
- 30. Dlaczego niektóre metody java w podstawowych bibliotekach kończą się cyframi?
Co rozumiesz przez "vtable"? To nie jest C++. – Antimony
Ale implementacja jest podobna do C++, różnica polega na tym, że vtables są obliczane, gdy program jest uruchamiany przez linker. –