Java 的 Compiler (非Interpreter) - Linux

By Skylar DavisLinda
at 2010-12-26T23:02
at 2010-12-26T23:02
Table of Contents
※ [本文轉錄自 java 看板 #1D5ra7Yp ]
作者: 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 可以用???
--
作者: 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 可以用???
--
Tags:
Linux
All Comments
Related Posts
ubuntu常常過熱關機

By David
at 2010-12-26T10:24
at 2010-12-26T10:24
在windows下使用ubuntu的環境來寫程式

By Erin
at 2010-12-26T02:33
at 2010-12-26T02:33
抓不到音效卡?

By Donna
at 2010-12-26T01:06
at 2010-12-26T01:06
ubuntu 下 pdf 顯示問題

By Skylar Davis
at 2010-12-26T00:36
at 2010-12-26T00:36
徵求對自由軟體授權議題有研究者?

By Zenobia
at 2010-12-26T00:06
at 2010-12-26T00:06