作者king19880326 (OK的啦~我都可以接受)
看板java
标题Re: [讨论] Java 的 Compiler (非Interpreter)
时间Sun Dec 26 23:02:28 2010
藉这个标题发问一下
我在 Ubuntu Linux 安装了 gcj, 想要知道 java 在不依靠 jvm
的执行效能如何
以下是我的测试程式码:
class test {
public static void main(String[] args)
{
long beginTime = System.currentTimeMillis();
for(int i = 0; i < 100000; ++i)
{
for(int j = 0; j < 100000; ++j)
{
for(int k = 0; k < 100000; ++k) { }
}
}
long endTime = System.currentTimeMillis();
System.out.println("Total Spends " +
(endTime - beginTime) + " milliseconds");
return;
}
}
(jdk 是采用 OpenJDK)
我的测试目标有四个, 分别是
(1) 使用 javac 编译成 .class, 并且采用 java 执行
(2) 利用 gcj 编译成 .class, 并且采用 java 执行
(3) 利用 gcj 编译成 executable(采用 libgcj.so), 直接执行
(4) 利用 gcj 编译成 executable(采用 libgcj.a), 直接执行
档案大小以及测试结果如下:
(1) 档案大小:813 bytes 结果:Total Spends 10367 milliseconds
(2) 档案大小:769 bytes 结果:Total Spends 6914 milliseconds
(3) 档案大小:11022 bytes 结果: 太久没跑出来过...
(4) 档案大小:40169122 bytes 结果: 太久没跑出来过...
请问这样的结果是正常的吗??
ps. 1. 有仿照上面的 java 写了一段 c, 同样太久没跑出来过
2. 如果使用 file 去察看 (4) 所产生的档案, 会得到
test_static: ELF 32-bit LSB executable, Intel 80386,
version 1 (SYSV), dynamically linked (uses shared libs),
for GNU/Linux 2.6.15, not stripped
但是我在编译时已有明确指定 --static-libgcj 并且与 libgcj.a 作
了连结. 为什麽还是 dynamically linked 呢??
3. 原 po 给的 JNC 连结下载下来似乎还是 gcj??
※ 引述《shrekwang (史瑞克)》之铭言:
: Oracle 发行的 Java 工具里面
: 似乎只有 interpreter
: 所以花点时间寻找 Java 的 compiler
: 不再依赖 JRE
: 目前找到有两个
: 一个叫 Java Native Compiler(简称JNC)
: http://jnc.mtsystems.ch/
: 依照网页说法好像支援 Java 1.5 (1.6我没测试)
: 另外一个就是 GNU 计画的 GCJ
: http://gcc.gnu.org/java/
: 请问各位大大还有没有其他的 compiler 可以用???
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.217.10
※ king19880326:转录至看板 Linux 12/26 23:02
1F:→ akasan:猜你 gcj 没加最佳化选项 jvm 有个 JRE 会帮你最佳化 12/27 01:30
2F:→ akasan:更正JRE->JIT , 所以回圈都被最佳化消掉了 不然哪可能这麽? 12/27 01:33
3F:推 LPH66:10^15 和 10^10 的差别? (for k 被消掉了这样) 12/27 02:01
4F:→ shrekwang:事实上我只用过GCJ 本人是GCC控 12/27 11:48
5F:→ akasan:0 次与 10^15 次方的差别 gcc -S 试试看就知道了 12/27 12:05
6F:推 LPH66:喔原来整块都被拿掉了啊...我以为还要10秒表示只拿掉内圈 12/27 12:48
7F:推 LPH66:突然发现我说的和五楼说的应该是不同的东西 12/27 12:50