Re: [翻譯] 拆穿 Java StringBuilder 的謠言
: (厄 我想這不需要註解吧?)
:
: 在這個case中 萬一所有condition都為true
:
: 那是不是就會宣告出N個StringBuilder 導致performance較差呢?
:
: --
: ※ 發信站: 批踢踢實業坊(ptt.cc)
: ◆ From: 140.112.217.52
: 推 cyclone350:我的理解是:yes ! 04/02 00:19
: → cha122977:我比較擔心有那裏誤解 或者其實我和你的case在哪有差 04/02 00:21
: → cyclone350:可以想像在大部分的情況jdk是直接用new builder替換的 04/02 00:26
: 推 PsMonkey:我想用 javap 去驗證比猜測可靠 XD 04/02 00:28
關於這點我想是不用測的
假設現在有兩種優化器:RBO(規則導向) 跟 CBO(成本導向)
RBO 就是定死的一個規則,例如有一個規則是 wtf() => wtfa()
那麼不管你甚麼時候呼叫 wtf(),他永遠會使用 wtfa() 來最佳化 !!
CBO 就是會判斷你的程式碼要用哪一種最佳化方式
例如你呼叫 wtf(),他會判斷到底是 wtfa() 比較好還是 wtfb() 會比較好
再根據判斷來最佳化
現在我們不知道 JAVA 到底用哪一種方式最佳化
假設是 RBO,那麼不管在甚麼 case 底下都會是 new StringBuilder !!
假設是 CBO,那麼他連那麼單純的迴圈都會判定成要使用 new StringBuilder 了
那我們也不用期待CBO在更複雜的程式裡面做最佳化的結果了
而且再怎麼說...使用 while 也是每次 loop 做一次條件檢查
while(i < 2){
num += i;
i++;
}
跟
if (i < 2) { num += 1; i++;}
if (i < 2) { num += 1; i++;}
if (i < 2) { num += 1; i++;}
是差不多的
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 49.159.136.214
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 5 之 8 篇):