作者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
1F:推 feathersnow:我觉得这种小程式试不太出来吧? Java的bytecode会被 09/07 18:36
2F:推 freesamael:gcj/gij性能是满差的,不过我没有料到编译之後的执行 09/07 18:37
3F:→ freesamael:性能也这麽差@@ 09/07 18:37
4F:→ freesamael:我觉得java最麻烦的就是这种short-term application 09/07 18:37
5F:→ freesamael:现在的jvm对long-term几乎都可以做到很好的最佳化 09/07 18:38
6F:→ freesamael:Sun以前的jit或是现在的hotspot都做到一定程度了 09/07 18:38
7F:→ feathersnow:JIT重新处理过, GCJ我还没试过不清楚. 09/07 18:37
8F:→ feathersnow:换到更大型的program, interpreter跟native compiler 09/07 18:43
9F:→ feathersnow:理论上是native会有较佳速度. 有错请指正. 谢谢. 09/07 18:43
10F:→ feathersnow:最後谢谢你的资讯. :) 09/07 18:44