精華區beta Eclipse 關於我們 聯絡資訊
※ 引述《freesamael (燒賣)》之銘言: : 這時我才發現一直被我丟棄在一旁,不太使用的 gcj/gij 竟然有提供把 java source 和 : java bytecode 編譯成機器碼的功能,而且老早就有人把 Eclipse 拿來開刀了。最早 : 這麼做的應該是 Red Hat 的工程師,他們弄了一個 native Eclipse 的專案,後來成為 : Fedora 專案的一部分 - Fedora Eclipse。 (http://sourceware.org/eclipse/) : 我在 Ubuntu Linux 套件庫內也找到 eclipse-gcj,一樣是以 gcj 編譯的 natively- : compiled Eclipse。但是我想試試最新的 Eclipse europa,所以我決定自己編譯一次。 : 其實也沒有想像中的困難,因為有現成的文件。(http://0rz.tw/fd2UX) 老實說,我做了一項簡單的測試,分別以 javac 編譯和 gcj 編譯 結果 javac 編譯的版本效率高過 gcj 編譯的版本高達 2 倍 測試用的程式碼如下: public class Driver { public static void main(String[] args) { long startTime = System.currentTimeMillis(); for (int i=0; i<50000; i++) for (int j=0; j<50000; j++); long endTime = System.currentTimeMillis(); System.out.println(endTime - startTime); } } 第一種編譯並執行: javac Driver.java java Driver 輸出的結果:6469 第二種編譯並執行: gcj --main=Driver Driver.java ./a.out 輸出的結果:11713 結果顯示 gcj 版本比 java 版本執行速度還慢個兩倍左右 測過很多次,誤差大約 ±10%, 所以測試結果應該是沒有問題 請問是我哪邊參數沒設到,還是本來效率就沒有比較高呢? 我的系統: linux kernel: 2.6.22-10 java version "1.6.0_02" Java(TM) SE Runtime Environment (build 1.6.0_02-b05) Java HotSpot(TM) 64-Bit Server VM (build 1.6.0_02-b05, mixed mode) gcj (GCC) 4.2.1 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.248.127.91
feathersnow:我覺得這種小程式試不太出來吧? Java的bytecode會被 09/07 18:36
freesamael:gcj/gij性能是滿差的,不過我沒有料到編譯之後的執行 09/07 18:37
freesamael:性能也這麼差@@ 09/07 18:37
freesamael:我覺得java最麻煩的就是這種short-term application 09/07 18:37
freesamael:現在的jvm對long-term幾乎都可以做到很好的最佳化 09/07 18:38
freesamael:Sun以前的jit或是現在的hotspot都做到一定程度了 09/07 18:38
feathersnow:JIT重新處理過, GCJ我還沒試過不清楚. 09/07 18:37
feathersnow:換到更大型的program, interpreter跟native compiler 09/07 18:43
feathersnow:理論上是native會有較佳速度. 有錯請指正. 謝謝. 09/07 18:43
feathersnow:最後謝謝你的資訊. :) 09/07 18:44