java执行内部优化吗?

时间:2015-03-28 06:49:45

标签: java optimization

Java是一种OOP语言,它有多个用于各种目的的内置类和方法。一个这样的例子是String类。方法length()确定字符串的长度。 例如,

String str = "hello";
for(int i=0;i<str.length();i++)
{
//code
}

这里,如果变量i小于字符串的长度,则评估条件,然后循环迭代。但是,它是否确定每次的长度

方法length()是否在每次评估条件之前调用?如果是这种情况,则Java会将变量的值内部存储在寄存器中以便快速访问(或)程序员必须明确地这样做:

String str = "hello";
int len = str.length();
for(int i=0;i<len;i++)
{
//code
} 

这种方法效率如何?

2 个答案:

答案 0 :(得分:2)

现代JIT可能会注意到length()是一个返回最终原始值的final类的简单getter,并用int值本身替换方法调用。对于C,在其他语言中,优化惩罚是正确的,但是不是java。 C&C的strlen遍历char数组,寻找字符串结尾的字符。

答案 1 :(得分:0)

String#length只是指一个变量。没有其他的。 结构是这样的:

class String {
    private int length;

    public int length() {
        return length;
    }
}

字符串是不可变的,所以没有理由首先改变它;唯一需要计算长度的时间是创建String的时间。

通常的做法是在需要时执行计算,更新size变量,然后在需要获取大小时参考getter。这样你就不会浪费时间计算它没有改变的大小。您可以在ArrayList

中看到此信息

至于“幕后”优化,它取决于VM实现,以及正在执行的代码。可以执行内联,以及一些运行时优化。但最终,它取决于代码和VM。