Java - 内联代码会有好处吗?

PND*_*NDA 11 java performance android memory-management inline

我做了一些研究,但我主要看到c ++的答案.我最接近的就是这个.我也看过这个页面,但它并没有真正解释任何事情.

如果我使用第二段代码有什么好处吗?会有明显的性能差异吗?记忆呢?如果重复完成怎么办?

现在我有这个功能.我确信这样做的好处是代码可读性:

private static Bitmap resize(Bitmap image, int maxWidth) {
    float widthReducePercentage = ((float) maxWidth / image.getWidth());
    int scaledHeight = Math.round(image.getHeight() * widthReducePercentage);

    return Bitmap.createScaledBitmap(image, maxWidth, scaledHeight, true);
}
Run Code Online (Sandbox Code Playgroud)

现在,我有第二段代码:

private static Bitmap resize(Bitmap image, int maxWidth) {
    return Bitmap.createScaledBitmap(image, maxWidth, Math.round(image.getHeight() * (float) maxWidth / image.getWidth()), true);
}
Run Code Online (Sandbox Code Playgroud)

一个更简单的例子是:

for(;;) {
    String foo = "hello";
    Console.print(foo + "world");
}
Run Code Online (Sandbox Code Playgroud)

for(;;) {
    Console.print("hello" + "world");
}
Run Code Online (Sandbox Code Playgroud)

Mik*_*zak 9

第一:这不是"内联"的意思.请参阅:什么是内联?

第二:不,表现不会有任何可衡量的差异.在两个代码示例中,两个版本的编译代码可能相同.

  • Java字节码将不同,因为局部变量没有被消除(它们可用于调试).JIT和Dalvik编译器可能会删除它们. (2认同)

小智 5

我定义了两个简单的类Test1Test2编译了它们。

public class Test1{
    public String f(){
        String s = "Hello";
        String t = "There";
        return s + t;
    }
}
Run Code Online (Sandbox Code Playgroud)

public class Test2{
    public String f(){
        return "Hello" + "There";
    }   
}
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是,.class 文件的大小不同。

-rw-r--r--  1 csckzp  staff  426 Dec 23 19:43 Test1.class
-rw-r--r--  1 csckzp  staff  268 Dec 23 19:43 Test2.class
Run Code Online (Sandbox Code Playgroud)

也许我不应该感到惊讶,因为一些符号信息是与代码一起存储的。我通过在线反编译器运行 .class 文件。 Test1几乎按照输入的方式重建。Test2另一方面,反编译方式如下:

public class Test2 {
    public String f() {
        return "HelloThere";
    }
}
Run Code Online (Sandbox Code Playgroud)

编译器的优化在这里清晰可见。也许 Java 中对于非紧凑代码有一个小的惩罚。