日期:2014-05-19  浏览次数:20714 次

Java 效率问题
class A{
public String a;
}

class B{
public A objA;
}
class demo{

public void test(){

B b= new B();
//1:
String temp = b.objA.a;
for(int i = 0 ; i < 99999999; i++)
System.out.print(temp);

//2:
for(int i = 0 ; i < 99999999; i++)
System.out.print(b.objA.a);

}
}

首先第一个例子。场景是假定在会有N次调用A中的一个字段。
第二个例子 。场景假定为调用N次test()方法.(将循环去掉,只是单独的使用)
想了解深入点 求分析~


------解决方案--------------------
不考虑编译器优化的话,那肯定是第一个快了。

这种问题,你应该学习C/C++和汇编,你就知道1是什么样子的汇编了。


而2,不优化的时候,编译出来的汇编会多一些寻址的过程。。。

好的编译器,可能把2个,编译成(接近)第一种。但是这取决于很多条件,线程,上下文等等。


------解决方案--------------------
应该第一个快吧,
第二个好比把String temp = b.objA.a;放在循环体内。。。
------解决方案--------------------
探讨

不考虑编译器优化的话,那肯定是第一个快了。

这种问题,你应该学习C/C++和汇编,你就知道1是什么样子的汇编了。


而2,不优化的时候,编译出来的汇编会多一些寻址的过程。。。

好的编译器,可能把2个,编译成(接近)第一种。但是这取决于很多条件,线程,上下文等等。