在Java中考虑一个简单的以下代码:
void func(String test)
{
if(str.length() > 0)
{
//do something
}
}
执行str.length()> 0表示每次调用此函数时,将分配4个字节的内存来存储0整数值?
答案 0 :(得分:2)
运行此函数所需的内存(包括0
)将是已编译程序(.class / .jar / .apk)的一部分,并且与无关功能运行。即使如果函数内联,只有代码大小根据函数调用的位置数增加,并且运行时没有内存分配< / strong>,代码运行时。
同时2条评论
length > 0
除了最严格的意义外,还算是硬编码。答案 1 :(得分:2)
如果您编写干净,清晰且简单的代码,JIT将在95%以上的情况下优化代码。如果你想要聪明一点,你就更有可能让代码变得更糟,而不是更好。
这条规则有一些值得注意的例外,但这些例子往往只持续几年。例如,Java 5.0中的Locks比同步更快,但在Java 7中,synchronized可以更快。
在考虑性能时,您应该查看整个系统的行为,而不是单独的代码行甚至是单个库。不这样做可能意味着你花时间担心一些没有区别的事情,而更重要的事情却被忽略了。
我已经看到整个团队多年来一直致力于优化系统,因为只要更改配置设置,他们就可以让整个系统变得更快。这是因为他们将视图限制在他们编写的代码中,并没有考虑他们如何使用他们所连接的系统。想象一下,当他们看到更多关于加速的事情时,会浪费多年的工作,并确保这不会发生在你身上。 ;)
答案 2 :(得分:0)
执行此代码时不会进行内存分配。
答案 3 :(得分:0)
在上面的代码中看起来没有任何严重的内存分配观点。
if(str.length()&gt; 0){}
这是比较的真正要求,因此它不会被视为硬编码值。
如果您对内存利用率非常严格,那么请始终选择确切的所需数据类型。
答案 4 :(得分:0)
此代码是本地方法,因此执行后内存将自动回收。 因为它是内部方法。
答案 5 :(得分:0)
是的,但在退出该功能后立即销毁。 int
是primitive type
。原始类型被认为是Java中最快的类型。所以,我认为它不会花费太多。