2012-01-19 2 views
0

Можно создать дубликат:
Why defining class as final improves JVM performance?Почему делает класс окончательной скоростью?

У меня есть следующий класс в моем проекте:

public final class LinkNode 
{ 
    public int value; 
    public LinkNode next; 

    public LinkNode(int value, LinkNode next) 
    { 
    this.value = value; 
    this.next = next; 
    } 

    public LinkNode(int value) 
    { 
    this(value, null); 
    } 
} 

Самая медленная линия в моем коде (который в целом довольно сложным) является где я создаю новый LinkNode s.

Я обнаружил, что когда я сделал класс final, код работал значительно быстрее. Почему это?

Есть ли что-нибудь еще, что я могу сделать в этом классе для оптимизации этого класса, в частности, основного конструктора?

(К примеру, геттеры/сеттеры быстрее, чем государственные полей? Есть ли другие модификаторы я могу добавить? И т.д.)

+3

PLS. показать сравнительные результаты, которые вы сравнили. – Azodious

+4

О, я нашел связанный с этим вопрос: http://stackoverflow.com/questions/3961881/why-defining-class-as-final-improves-jvm-performance – dsg

+0

Вы уверены, что он существенно отличается от скорости? – anubhava

ответ

1

Я обнаружил, что, когда я сделал класс окончательный код значительно быстрее побежал. Почему это?

Я думаю, что это из-за недостатка в методологии бенчмаркинга.

Предполагая, что вы используете недавно созданную Jots Jots, JIT-компилятор достаточно умен, чтобы модификатор final класса не влиял на производительность ... если вы фактически не используете подкласс класса в своем приложении.

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

0

Объявление окончательного класса напрямую влияет на производительность JVM. Заключительные классы и методы могут быть встроены после загрузки в JVM, потому что в этот момент JVM точно знает, что этот метод является окончательным. Поэтому может быть улучшение производительности компиляторов Java точно в срок.

Вы можете проверить ссылки, представленные здесь для получения дополнительной подробной информации: http://www.javaperformancetuning.com/tips/final.shtml

+0

JIT будет встроить методы в любом случае и при необходимости отключить его. Я пойду с объяснением Стивена: ошибочный тест. – Voo

+1

Я бы не стал полагаться на информацию на связанной странице. 1) Он говорит «может» и «будет» повсюду, а это значит, что автор формулирует теории, а не факты. 2) Нет ссылок на контрольные показатели или окончательные источники. 3) Нет даже упоминаний о конкретных версиях/выпусках Java, и известно, что от этого зависит реальная производительность. –

Смежные вопросы