隨筆 - 312, 文章 - 14, 評論 - 1393, 引用 - 0

          導航

          <2008年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          公告

          關注我的新浪微博

          我的著作









          常用鏈接

          留言簿(126)

          我參與的團隊

          隨筆分類(818)

          隨筆檔案(310)

          文章分類(1)

          文章檔案(8)

          相冊

          ADSL、3G查詢

          CSDN

          eclipse

          ibm

          Java EE

          Linux

          Web

          云服務

          代理網站

          關注的網站

          協議

          喜歡的Blog

          國內廣告平臺

          圖書出版

          在線培訓

          開發工具

          微博客戶端

          手機鈴聲

          操作系統

          • ReactOS
          • 一個與windowXP/2003兼容的操作系統

          數學

          文件格式

          源碼資源

          移動(Mobile)

          編程語言

          英語學習

          最新隨筆

          搜索

          •  

          積分與排名

          • 積分 - 1973455
          • 排名 - 6

          最新評論

          閱讀排行榜

          評論排行榜

          Java 6 Hotspot的性能將有可能超越編譯型語言

              Sun公司的Kohsuke Kawaguchi考察了Hotspot JIT在JDK6 u10 b14 debug版中產生的匯編代碼,并將其記錄在博客中。該博文著重闡述了Java優化的程度。

              Kawaguchi 將重點放在兩個主要的地方。首先是循環展開(loop unrolling),它是這樣一種技術:復制循環的每次迭代所調用的指令以構成一個序列。通過減少循環中計算機需要執行的指令,節省了執行時間。JIT 將其與預處理和事后分析相結合,同時Kawaguchi對此的補充也說明了這樣的事實:編譯器已從循環的快速執行部分當中移除了一個冗余的數組索引檢查。此外,結果匯編代碼證明了特定于處理器的優化程度如何。例如,Kawaguchi談到了下面的代碼:

          private static byte[] foo() { byte[] buf = new byte[256]; for( int i=0; i buf[i] = 0; return buf; }

              所產生的匯編結果使用了特定于AMD64芯片的R8-R15通用寄存器匯編代碼。

              其次是圍繞著鎖(locks)而進行的優化。在Java中非競態鎖的獲取在不斷地改進,而競態鎖的獲取卻一直存在問題。這個領域的工作還在持續進行中,但是Kawaguchi的工作卻說明了幾個已經得到改進的地方。

              這篇文章展示了該Hotspot編譯器很多其他的特性,包括強大的內聯——James Gosling注意到一篇相關的博文中說“甚至連存儲分配和初始化都需要內聯”。這一層級的侵略性(aggression)是可能存在的,部分原因在于 JVM會在必要時做一些潛在不安全的優化。Charles Nutter在今年初參加Lang.NET大會時曾對此提出了一個很好的解釋。他也強調了這項工作與JRuby的關系,以及與任何面向JVM的語言的關系。

              “過去JVM有多種不同的能力去動態優化和再優化代碼……或許最重要的是必要時的動態“逆優化(deoptimize)”。在處理性能問題時,逆優化(Deoptimization)令人非常興奮,因為這意味著你可以進行更多的侵略性優化——對整個應用不確定的未來的潛在的不安全的優化——知道你可以在安全的路徑上回退。一旦你幾次遇到相同的路徑,你就可以內聯整個調用路徑。除非明顯需要,你可以忽略同步保護。你還可以在發現問題之后改變使用的優化集……本質上,在運行過程中你可以安全的“出錯”并且從錯誤中學習。這就是為什么在特定的基準上Java超越了C和C++以及最終在幾乎所有基準上它都能將超越C和C++的主要原因。同時這也是我們的JRuby與微軟的IronPython和DLR相比,只需要做很少的事情就可以獲得可接受的性能的一個關鍵原因。”

              從理論上講,像Java這樣的解釋型語言的性能很有可能最終將超越編譯型語言,因為它可以在運行時基于現有硬件進行優化,同時Java中不斷提高的對特定于處理器的優化確實令人非常興奮。對于面向Java平臺的開發者來說,一個額外的好處在于隨著新版本 Java編譯器的發布,代碼的性能會不斷改進,而無需對應用的源碼做任何更改。

          英文原文:http://www.infoq.com/news/2008/05/hotspot_performance




          Android開發完全講義(第2版)(本書版權已輸出到臺灣)

          http://product.dangdang.com/product.aspx?product_id=22741502



          Android高薪之路:Android程序員面試寶典 http://book.360buy.com/10970314.html


          新浪微博:http://t.sina.com.cn/androidguy   昵稱:李寧_Lining

          posted on 2008-05-14 17:16 銀河使者 閱讀(894) 評論(6)  編輯  收藏 所屬分類: java

          評論

          # re: Java 6 Hotspot的性能將有可能超越編譯型語言  回復  更多評論   

          好像不太可能,怎么都會有一個加載字節碼過程,解釋型再優化都有中間代碼的存在,本地代碼則不同,肯定效率要高,如果字節碼能優化的方法,本地代碼也參照來優化一下,那么了節碼仍然是無法比擬的,只是本地代碼可能還不屑如此

          就像競走不會有跑快一樣的。
          2008-05-14 18:24 | 隔葉黃鶯

          # re: Java 6 Hotspot的性能將有可能超越編譯型語言  回復  更多評論   

          完全有可能,因為實際上java現在最后運行的是本地代碼了,所以在足夠優化的情況下是可以超過其他本地代碼的。這看起來最后將是編譯器的優化比較。
          2008-05-16 00:21 | magicgod

          # re: Java 6 Hotspot的性能將有可能超越編譯型語言  回復  更多評論   

          這也就是在持續運行的像企業應用服務程序有這個優勢,能夠盡可能的多運行本地代碼。對于桌面程序,你每次啟動,并在前面階段的執行就是在解釋字節碼,弱點就體現在桌面程。
          并且Java程序占用巨大的內存,這在硬件成本不高的情況,倒能夠接受增加硬件成本換取性能的做法。
          2008-05-25 19:24 | 隔葉黃鶯

          # re: Java 6 Hotspot的性能將有可能超越編譯型語言  回復  更多評論   

          這只是java支持者的yy而已,相同的架構和算法的情況下,java程序的執行速度要遠低于c/c++的, java相對于c/c++的優勢絕不在于程序執行的效率,而在于開發的效率。
          2009-04-03 14:45 | Linux.Socket

          # re: Java 6 Hotspot的性能將有可能超越編譯型語言  回復  更多評論   

          我以前在java環境下寫jsp/servlet, 當時也以為這種服務器端的東西,java應該比c/c++慢不了多少,后來因為換了公司,變成用c/c++寫cgi, web服務器用的ngix, 這才發現,即使在服務器端,java在c/c++面前,在速度方面,也是完全沒有可比性的。。。當然,寫c/c++程序要付出更多的努力,開發效率比java低
          2009-04-03 14:50 | Linux.Socket

          # re: Java 6 Hotspot的性能將有可能超越編譯型語言[未登錄]  回復  更多評論   

          java6 比 5 快好多
          2010-01-15 10:15 | billy
          主站蜘蛛池模板: 万宁市| 建瓯市| 格尔木市| 邓州市| 阳谷县| 庆城县| 绥中县| 通渭县| 孟村| 二连浩特市| 竹山县| 大竹县| 弥勒县| 普兰县| 城口县| 孟州市| 扶绥县| 剑河县| 乐昌市| 广水市| 安福县| 阜平县| 腾冲县| 大邑县| 右玉县| 泾源县| 蚌埠市| 安泽县| 宝鸡市| 福安市| 札达县| 沁源县| 松阳县| 丘北县| 康乐县| 综艺| 三河市| 怀宁县| 诸暨市| 东平县| 远安县|