为什么让班级最终加快速度呢?

时间:2012-01-19 06:49:35

标签: java optimization final compiler-optimization

  

可能重复:
  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的地方。

我发现当我创建课程final时,代码运行得更快。那是为什么?

我可以在这个类中做些什么来优化这个类,特别是主构造函数吗?

(例如,getter / setter比公共字段更快?我可以添加其他修饰符吗?等等。)

2 个答案:

答案 0 :(得分:1)

  

我发现当我上课时,代码运行得更快。那是为什么?

我认为这是因为您的基准测试方法存在缺陷。

假设您正在使用最近的Hotspot JRE,那么JIT编译器足够聪明,类上的final修饰符不会对性能产生影响......除非您在应用程序中实际使用该类的子类

如果您想要确认,请发布您的方法的详细信息,包括基准代码和基准测试结果。

答案 1 :(得分:0)

声明类final会直接影响JVM的性能。最终的类和方法在加载到JVM后可以内联,因为在那时JVM肯定知道该方法是最终的。因此,即时Java编译器可能会有性能提升。

您可以查看此处提供的链接以获取更多详细信息:http://www.javaperformancetuning.com/tips/final.shtml