我对字节码和编译代码知之甚少。我有一个方法,在一个性能非常关键的路径。使用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));
}
答案 0 :(得分:6)
关于性能,使用自己的代码有什么好处吗?
在JVM级别,没有。
类,无论是你的还是库,都是由类加载器加载的,之后所有的类都是相同的。方法是invoke{special,static,virtual,interface}
d [1]同样的方法,方法&#39;字节码使用完全相同的JIT机制进行优化(内联,循环展开,转义分析,您可以命名)等。
唯一的区别在于代码本身的性能。为此,您需要进行微基准测试(例如,使用jmh或caliper)。
[1]这些是四个主要的字节码执行指令,以及invokedynamic
答案 1 :(得分:0)
方法的调用时间取决于JVM。
但如果你在谈论方法性能,那完全取决于实现。
让我们说如果有两种方法可以做同样的事情,但实现方式不同。它们的性能可能因同一JVM而异。显然,更好的实施速度比另一种更快。
一旦一个对象(你自己的或一个库)存在于内存中,JVM就会同等对待它们。
您必须手动运行并测试它们的用例,以得出使用哪一个的结论。
由于库方法可以做更多你真正需要的事情,如果你使用它的精简版本,你会获得更好的性能。