這個問題與記憶和主要表現有關。 最近幾天我反思了這個話題,這不是我需要使用的東西,只是好奇而已。 我創建了一個簡單的例子:創建對象和委派比一個大方法慢得多?
使用沒有授權和不具有內部類1)的一類:
調用四個內類public class NoInnerClass {
public void theMethod(int times){
for(int i=0; i<times; i++){
System.out.println("No Inner hello: " + i);
}
}
}
2)的一類。最後一個不一樣NoInnerClass在theMethod方法
public class InnerMain {
private Inner1 inner1 = new Inner1();
public void theMethod(int times){
inner1.doIt(times);
}
}
...
public class Inner4 {
public void theMethod(int times){
for(int i=0; i<times; i++){
System.out.println("Inner 4 hello: " + i);
}
}
}
我測量了這兩種類型的呼叫之間的毫秒的時間差。 差異並不大 - 超過一毫秒。但是如果我們有更復雜的內部對象和更多的委託調用,我們肯定會有更大的差異。
所以問題是:
- 會在第一時間與這兩種方法之間所使用的內存量差異顯着增加
- 如果是的話,是有這個(我找不到太多)的任何物品
- 或者,也許今天的JVM是如此聰明,我們不應該去想它
預先感謝您爲您的回答。
That:「*或者也許今天的JVM非常聰明,我們不應該考慮它*」......這裏明顯的優化是方法內聯,它應該將兩個代碼編譯成基本相同的說明。 。順便說一下,你發現的差異可能是衡量問題,而不是實際的性能差異。 – assylias
修復縮進 –
區別在於多次嘗試的平均次數。並感謝提醒有關內聯代碼:) – user3188414