小Java性能问题

时间:2011-01-04 09:30:58

标签: java performance

好奇,哪个代码更有效:

if (myClass.getSomeValue() != myValue) myClass.setSomeValue(myValue);

或只是

myClass.setSomeValue(myValue);

getSomeValue()setSomeValue(...)是简单的getter-setter对吗?很明显,如果使用.equals(),第二个会更快,所以我们只使用!=

5 个答案:

答案 0 :(得分:7)

  1. 微优化没有意义,尤其是基于字节码的语言,如Java。感谢Hotspot,针对两个代码段执行的实际机器级指令可能会因实际环境,使用模式等而有很大差异。

  2. 因此,即使您确实需要这样做,我也不认为在不知道myValue与原始版本实际不同的频率的情况下,您的问题会得到一般答案。

答案 1 :(得分:5)

  1. 第一个显然会更快。

  2. 在知道瓶颈所在之前不要进行优化。请记住,过早优化是万恶之源。通常的瓶颈是数据库,网络,创建大量对象。简单地检查一个值不是瓶颈。

  3. 提示: !=equals()不一样。以前检查身份(参考指向同一个对象),后面检查是否相等(如果两个不同的对象具有相同的值)。

答案 2 :(得分:2)

我会假设第二个因为你在获取变量引用时仍在进行内存访问,即使你最后没有设置它。 瓶颈可能不是测试而是内存访问。

答案 3 :(得分:1)

只有这样才会更好

myClass.setSomeValue(myValue);

条件检查很重

1

<强> if (myClass.getSomeValue() != myValue) myClass.setSomeValue(myValue);

将会有以下操作:

最佳案例

1.a方法调用myClass.getSomeValue()
2.与myValue

进行比较

最坏情况
1.a方法调用myClass.getSomeValue()
2.与myValue的比较 3.a方法调用myClass.setSomeValue(myValue)

2

myClass.setSomeValue(myValue);

中的

任何案例
1.a方法调用myClass.setSomeValue(myValue)

答案 4 :(得分:1)

第二个更快,因为第一个与第二个相同,只有一个额外的方法调用