Re: [問題] 對於JNC的疑問

看板java作者 (偶爾想擺爛一下)時間14年前 (2010/06/11 17:02), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/3 (看更多)
※ 引述《tonytonyjan (南洋大兜蟲)》之銘言: : Java Native Compiler就是可以把java編譯成本地可執行檔的編譯器(無法跨平台) : 以前有滿多家公司在做Java Native Compiler,但現在都倒的差不多了,沒有JRE環境也 : 可執行的好像只剩下兩個產品:GJC與Excelsior JET : GJC 是GNU Java Compiler : Excelsior JET 是Excelsior公司所有的Java Ahead-Of-Time Compiler : 但這兩個倖存者都有相同問題: : AWT、Swing、JDBC,都不支持,所以若程式有用到AWT、Swing、JDBC、或者是Applet的話 : 還是要安裝JRE : 我的問題和上一篇一樣:為什麼JNC都無法支援Java GUI : 是技術上不可能達到呢 : 還是根本是錢的問題…… 我覺得第一句話本身蠻抽象的... 所以我不清楚在這裡 JNC 的定義是什麼? 如果把 JVM embedded 在 native executable 並且把所有需要用到的 J2SE core classes 與 third-party classes 都預先經過 JIT 處理過,並且把 處理後的 native code 靜態連結在 executable 裡,這樣子算不算 JNC tool? 要讓 Java application 能夠在沒有安裝 JRE 的情況下能夠執行,有許多種 作法,在難易程度上與所需做的瑣事差異蠻大。 最基本的作法是(假設 JRE 內的 binary 形式的 files 皆是可 redistributable) 重新散佈 JRE 內必要的檔案,然後利用 Launch4j 製作一個 launcher executable file 讓 user 啟動程式。這作法嚴格來說就是帶著 JRE 走,所以在 runtime 效率上不會有進步。 其他往更低層面的作法,對我來說最棘手的部分會是: Java runtime 有許多部分都是由 native code 負責(特別是 AWT 子系統),假如 我要把 VM interpret bytecode 的部分轉換成執行預先將 bytecode 編譯成的 native code,最後我還是需要 redistribute JRE 裡的 dll 檔案,不然就是 要能夠把放在 dll 裡的 native method 的碼靜態連結在 executable 裡,或是 轉成另一種格式來規避再散佈的問題,又或者重新實做 dll 所提供的功能部分。 我不是很清楚 JRE 內的檔案是否可以再散佈?(印象中是不經過修改的話是可以的) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.173.134.42 ※ 編輯: sbrhsieh 來自: 218.173.134.42 (06/11 17:05)
文章代碼(AID): #1C4Vl3GC (java)
文章代碼(AID): #1C4Vl3GC (java)