Действительно ли абстрактные классы в Scala работают лучше, чем черты?

Выдержка из книги по лестницам:

Если эффективность очень важна, склоняйтесь к использованию класса. Большинство Java Большинство сред выполнения Java делают вызов виртуального метода члена класса более быстрой операцией, чем ...

Выдержка из книги по лестницам:

Если эффективность очень важна, склоняйтесь к использованию класса. Большинство Java Большинство сред выполнения Java делают вызов виртуального метода члена класса более быстрой операцией, чем ...

Выдержка из книги по лестницам:

Если эффективность очень важна, склоняйтесь к использованию класса. Большинство Java среды выполнения делают вызов виртуального метода члена класса более быстрой операцией чем вызов метода интерфейса. Черты компилируются в интерфейсы и поэтому может иметь небольшие накладные расходы на производительность. Однако вам следует сделайте этот выбор только в том случае, если вы знаете, что рассматриваемая черта представляет собой производительность узкое место и иметь доказательства того, что использование класса вместо этого решает проблему.

Я написал простой код, чтобы увидеть, что на самом деле происходит за кулисами. И я заметил, что invokevirtual используется в случае абстрактного класса, и invokeinterface используется в случае интерфейса. Но независимо от того, какой код я написал, они всегда выполнялись примерно одинаково. Я использую HotSpot 1.6.0_18 в серверном режиме.

JIT так хорошо выполняет оптимизацию? Есть ли у кого-нибудь образец кода, подтверждающий утверждение из книги о том, что invokevirutal является более быстрой операцией?

13
задан skaffman 27 November 2011 в 15:24
поделиться