作者sbrhsieh (偶尔想摆烂一下)
看板java
标题Re: [问题] 对於JNC的疑问
时间Fri Jun 11 17:02:56 2010
※ 引述《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)