调用库比使用自己的代码慢吗?

时间:2014-12-15 11:47:45

标签: java performance

我对字节码和编译代码知之甚少。我有一个方法,在一个性能非常关键的路径。使用java的API和apache库有另一种方法可以做到这一点。但是我担心涉及两个额外的类会使方法变慢。 所以我的问题是,关于性能,使用自己的代码有什么好处吗?

这些是使用我自己的代码并使用库的方法:

public final static List<Long> longArrayToLongList(long[] array)
{
    if (array == null)
    {
        return null;
    }

    List<Long> list = new ArrayList<Long>(array.length);
    for (long value : array)
    {
        list.add(Long.valueOf(value));
    }
    return list;
}

public final static List<Long> longArrayToLongListWithLib(long[] array)
{
    return Arrays.asList(ArrayUtils.toObject(array));
}

2 个答案:

答案 0 :(得分:6)

  

关于性能,使用自己的代码有什么好处吗?

在JVM级别,没有。

类,无论是你的还是库,都是由类加载器加载的,之后所有的类都是相同的。方法是invoke{special,static,virtual,interface} d [1]同样的方法,方法&#39;字节码使用完全相同的JIT机制进行优化(内联,循环展开,转义分析,您可以命名)等。

唯一的区别在于代码本身的性能。为此,您需要进行微基准测试(例如,使用jmh或caliper)。

[1]这些是四个主要的字节码执行指令,以及invokedynamic

答案 1 :(得分:0)

方法的调用时间取决于JVM。

但如果你在谈论方法性能,那完全取决于实现。

让我们说如果有两种方法可以做同样的事情,但实现方式不同。它们的性能可能因同一JVM而异。显然,更好的实施速度比另一种更快。

一旦一个对象(你自己的或一个库)存在于内存中,JVM就会同等对待它们。

您必须手动运行并测试它们的用例,以得出使用哪一个的结论。

由于库方法可以做更多你真正需要的事情,如果你使用它的精简版本,你会获得更好的性能。