作者cyclone350 (老子我最神)
看板java
标题Re: [翻译] 拆穿 Java StringBuilder 的谣言
时间Tue Apr 2 01:07:49 2013
: (厄 我想这不需要注解吧?)
:
: 在这个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