Java性能:true与Boolean.TRUE

哪个更好的性能和高效的内存使用?

Boolean isItTrue(arg){ 
    return Boolean.TRUE;
}

boolean isItTrue(arg){
    return Boolean.TRUE
}

Boolean isItTrue(arg){
    return true;
}

boolean isItTrue(arg){
    return true;
}

它应该更快更容易使用原始类型,但另一方面,当使用引用静态对象时,不会创建新的值。或者可能是在编译器级别上进行了优化,所有的true和false都被替换为静态对象的引用来节省内存?

首先,使用任何一个优于其他的性能优势最有可能太小而无法相关。在绝大多数情况下,代码简单性/可读性/可维护性更重要。

没有一个示例涉及创建一个布尔实例。在理论上可能的是,4中的3个将触发布尔类的初始化…并且您的应用程序将不会这样做。在这种不太可能的事件中,您的整个应用程序将分配2个不会被分配的对象。

这一个将等于或快于所有其他人,因为它只需要将寄存器设置为零。

boolean isItTrue(arg){
    return true;
}

取而代之的是从内存中加载静态引用,而不是将寄存器置零。但是,在某些情况下,JIT编译器可能能够优化此操作。

Boolean isItTrue(arg){ 
    return Boolean.TRUE;
}

在表面上,这涉及到Boolean.valueOf(true)对“box”的调用,但JIT编译器应该能够通过内联调用将其优化为与前一个相同的代码。

Boolean isItTrue(arg){
    return true;
}

从表面上看,这涉及到Boolean.booleanValue(Boolean.TRUE)调用“unbox”的布尔值。这个电话可以内联。 JIT编译器也可以避免将引用加载到布尔对象并获取其值字段。

boolean isItTrue(arg){
    return Boolean.TRUE
}

底线是它的4个替代方案的相对性能取决于JIT编译器在优化中的成功程度。这将取决于上下文,JIT编译器的具体情况,JVM设置等。在最佳情况下,JIT编译器(至少在理论上)可以为所有编译器生成相同(最佳)代码。

http://stackoverflow.com/questions/6911563/java-performance-true-vs-boolean-true

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:Java性能:true与Boolean.TRUE