<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 312, 文章 - 14, 評論 - 1393, 引用 - 0
    數據加載中……

    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 銀河使者 閱讀(893) 評論(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
    主站蜘蛛池模板: 亚洲午夜精品久久久久久浪潮| 7m凹凸精品分类大全免费| 九九精品免费视频| 亚洲精品自拍视频| 69视频在线观看高清免费| 亚洲AV中文无码乱人伦下载| 美女网站在线观看视频免费的| 亚洲国产综合精品中文第一| 1000部禁片黄的免费看| 亚洲欧洲中文日产| 又黄又爽又成人免费视频| 亚洲丰满熟女一区二区v| 免费99精品国产自在现线| 国产亚洲精品影视在线| 日韩中文无码有码免费视频| 亚洲av永久无码精品表情包| 99在线免费观看| 亚洲精品97久久中文字幕无码| 免费精品国产自产拍在线观看 | 亚洲精品第五页中文字幕| 一级毛片在线免费观看| 亚洲自国产拍揄拍| 成人永久免费高清| 国产精品福利在线观看免费不卡 | 在线观看日本免费a∨视频| 亚洲国产精品成人精品无码区| 国产无遮挡裸体免费视频在线观看 | 久久精品国产亚洲AV蜜臀色欲| 精品国产一区二区三区免费看| 黄网站色视频免费看无下截| 亚洲熟女少妇一区二区| 中文字幕视频免费| 色偷偷亚洲第一综合| 亚洲老妈激情一区二区三区| 亚洲无砖砖区免费| 国产亚洲福利精品一区二区| 韩国免费三片在线视频| 9久热精品免费观看视频| 亚洲无人区视频大全| 免费在线观看毛片| 99re6热视频精品免费观看|