Re: [翻譯] 拆穿 Java StringBuilder 的謠言

看板java作者 (老子我最神)時間11年前 (2013/04/02 01:07), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串5/8 (看更多)
: (厄 我想這不需要註解吧?) : : 在這個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
文章代碼(AID): #1HMRxdxW (java)
討論串 (同標題文章)
文章代碼(AID): #1HMRxdxW (java)