Re: [討論] Java 的 Compiler (非Interpreter)

看板java作者 (OK的啦~我都可以接受)時間15年前 (2010/12/26 23:02), 編輯推噓3(304)
留言7則, 3人參與, 最新討論串2/2 (看更多)
藉這個標題發問一下 我在 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

12/27 01:30, , 1F
猜你 gcj 沒加最佳化選項 jvm 有個 JRE 會幫你最佳化
12/27 01:30, 1F

12/27 01:33, , 2F
更正JRE->JIT , 所以迴圈都被最佳化消掉了 不然哪可能這麼?
12/27 01:33, 2F

12/27 02:01, , 3F
10^15 和 10^10 的差別? (for k 被消掉了這樣)
12/27 02:01, 3F

12/27 11:48, , 4F
事實上我只用過GCJ 本人是GCC控
12/27 11:48, 4F

12/27 12:05, , 5F
0 次與 10^15 次方的差別 gcc -S 試試看就知道了
12/27 12:05, 5F

12/27 12:48, , 6F
喔原來整塊都被拿掉了啊...我以為還要10秒表示只拿掉內圈
12/27 12:48, 6F

12/27 12:50, , 7F
突然發現我說的和五樓說的應該是不同的東西
12/27 12:50, 7F
文章代碼(AID): #1D5ra7Yp (java)
文章代碼(AID): #1D5ra7Yp (java)