JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Software Design » Effective Java  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to topicthreaded modego to previous topicgo to next topic
本主題所含的標籤
作者 [Effective Java 2nd] 條款5 : 避免創建「不必要的物件」
koji

秒速5センチメートル

站長

發文: 8415
積分: 19
於 2008-12-27 20:37 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
可以參考這邊的文章

http://www.javaworld.com.tw/jute/post/view?bid=44&id=17000&sty=1&tpg=1&age=0

跟之前第一版討論差不多

但是多了有關AutoBoxing可能造成創建不必要的物件的狀況

1
2
3
4
5
6
7
public static void main(String[] args){
  Long sum = 0L;
  for(long i = 0; i < Integer.MAX_VALUE; ++i){
    sum += 1;
  }
  System.out.println(sum);
}


以上code會有效能上的狀況.
因為sum宣告成Long, 但是在1.5下autoboxing的關係所以可以編譯執行.

但是因為sun是Long, 因此會產生沒必要的物件Long 2的31次方個(每當long i加到Long sum時).

如果把sum改成long, 可以把效能從43秒變成6.8秒(在作者的機器上)

所以說, 請盡量使用primitives,然後多注意無心造成的autoboxing.

另外書本最後提到,不要因為此條款而誤會JVM在創建物建是非常吃重的.
現在的JVM效能都已經很不錯了.
所以建議如果不是真的建立很吃重(heavyweight)的物件不要去使用pool.
也可以參考上面連結的hkdennis2k的文章.

koji


reply to postreply to post
JCConf Taiwan 2015 開始售票了!!
Facebook上的TWJUG社團,歡迎加入
作者 Re:[Effective Java 2nd] 條款5 : 避免創建「不必要的物件」 [Re:koji]
koji

秒速5センチメートル

站長

發文: 8415
積分: 19
於 2008-12-27 20:41 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
另外改的小地方
page 22吧英文版的
作者機器上
第一版時效能:一百萬次 從36000ms變成370ms(改良過的)
第二版時的效能:一千萬次 從32000ms變成130ms(改良過的)

jvm跟硬體的進步XD

koji


koji edited on 2008-12-27 20:43
reply to postreply to post
JCConf Taiwan 2015 開始售票了!!
Facebook上的TWJUG社團,歡迎加入
» JWorld@TW »  Software Design » Effective Java

reply to topicthreaded modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8