Отрывок из книги лестницы:
Если эффективность очень важна, опирайтесь на использование класса. Большинство Java время выполнения делает вызов виртуального метода членом класса более быстрой операцией чем вызов метода интерфейса. Черты компилируются в интерфейсы и, следовательно, могут заплатить небольшие накладные расходы. Однако вы должны сделайте этот выбор только в том случае, если вы знаете, что эта характеристика представляет собой результат узкое место и имеют доказательства того, что вместо этого вместо этого использовать класс решает проблему.
Я написал простой код, чтобы увидеть, что действительно происходит за кулисами. И я заметил, что invokevirtual
используется в случае абстрактного класса и invokeinterface
в случае интерфейса.
Но независимо от того, какой код я написал, они всегда грубо исполняли то же самое. Я использую HotSpot 1.6.0_18 в режиме сервера.
Является ли JIT такой оптимистичной работой?
У кого-нибудь есть пример кода, который доказывает, что требование из книги о invokevirutal
является более быстрой операцией?