只是一个简单的问题在Java中哪些代码更昂贵?什么更昂贵?作业或声明?
double test = 5;
double test1 = 5;
或
double test = 5;
double test1 = test;
只是一个简单的问题在Java中哪些代码更昂贵?什么更昂贵?作业或声明?
double test = 5;
double test1 = 5;
或
double test = 5;
double test1 = test;
都不是。 Java有一个非常好的优化器,它会导致在这个例子中生成完全相同的代码。
编译器查看作业double test1 = test;
,可以发现在此时test
是一个等于5
的常量,并完全优化了分配。
这也是为什么你不应该害怕扩大了数值,即。
int timeout = 60 * 60 * 2 // 2 hours in seconds
这完全放在一边,这是micro-optimisation非常多的情况下,将永远返回任何值得一提的。担心该网络连接会阻止几秒钟的工作。
这甚至不是微型优化。我们需要像这样给一个新的术语。纳米优化也许? – 2010-07-12 11:15:37
实际上'javac'不会优化它到完全相同的代码;我用Oracle Java 1.6.0 update 20测试了这个(用'javap -c'反编译)。 JIT可能会优化这一点。但是现在我同意这样的微观优化(几乎)是不值得花时间的。 – Jesper 2010-07-12 13:34:20
@Jesper这很有趣,因为这是最基本的优化之一,我总是会听说java如何优化事物。 – 2010-07-12 21:28:26
两者之间的差异可以忽略不计。我想这个常数会更快一点,因为没有加载测试的价值,但真的......这不值得你花时间去担心它。可读性比您可能想到的节省的周期要重要得多。
我首先想到的是说,写一个小程序循环和测试。 但是,它可能比这更复杂。
Java可以做各种优化的东西,你写的代码了,这是哪门子的东西,他们重点关注。所以这很难回答,它可能取决于特定的JRE和代码。
虽然我明白,这是一个有趣的学术问题,在实际应用中,答案可能是“没有多大意义”你的代码的其他部分通常会做出更多的是瓶颈。
为了您的具体的例子,我有一种感觉,“5”可能是一个特例,那里是静态的整数的系统池,我知道他们做,与字符串。有人知道吗?
一些JRE甚至会优化整个循环结构,如果它没有做任何有效的事情。 – 2010-07-12 11:26:53
最底部最后一行'test'和'1'之间的空格是错字,对吗? – 2010-07-12 11:12:45
不成熟的优化...没关系:) – eljenso 2010-07-12 11:14:41