Re: [問題] 新手繼承問題(非作業)
→
10/21 00:09,
10/21 00:09
推
10/21 00:14,
10/21 00:14
我用1,000,000,000次的迴圈各跑了兩種case幾次 (WinXP, JRE6)
counter += 1 和 this.counter += 1;
時間上毫無差別
===========================================
之前有看過一本書在講JVM優化的問題
有提到這類東西
因為那個有點深度
我沒辦法說的很好
所以就直接講跳到我看過的結論:
JVM會替你搞定一切
所以,就別太去計較速度跟那些小細節了
JVM在執行程式時,會自己去判斷該怎麼執行
甚至重編都有可能
一些鎖(synchronized、lock)如果JVM判斷只有一條執行緒會動到鎖的話
他會把鎖拿掉
一些頻繁執行的區塊,會把他編成機械碼去執行
甚至一些區域變數
public Test(int a)
{
int b=a;
System.out.print(b);
}
JVM看到這種東西,會直接改寫為
public Test(int a)
{
System.out.print(a);
}
還有物件欄位的調用
class ClassA
{
String s="TEST";
}
public TEST(A a)
{
while(true)
{
System.out.print(a.s);
}
}
第一次調用到a.s的時候,會先去找a,再去找a.s出來
但如果是第二次的話,JVM就會自己判斷有沒有變動的可能
如果沒可能變動,就直接拿上次的質來用
還有有些字串連加的狀況
s="HELLO Ms."+name;
s+=" This is a message to you";
s+=" Time: "+time;
JVM會自動換成StringBuffer去粘字串
或是將連續無變數的字串,在編譯時變成同一串之類的
所以.... 寫JAVA就放心寫啦
雖然不是完全不用管演算法跟效率
但已經不用把心思放在這種小地方上了
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.38.77.105
※ 編輯: LaPass 來自: 114.38.77.105 (10/21 14:59)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 4 之 4 篇):