作者H45 (!H45)
看板Eclipse
標題Re: 可行嗎? 原生編譯的 Eclipse
時間Fri Sep 7 12:52:11 2007
※ 引述《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