知识大全 在Fedora Core上交付Java应用
Posted 知
篇首语:少年乘勇气,百战过乌孙。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 在Fedora Core上交付Java应用相关的知识,希望对你有一定的参考价值。
在Fedora Core上交付Java应用 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
在Fedora的发布版中 Fedora 是首个包含了大量用Java编程语言编写的代码的版本 正是由于GNU类路径(Classpath)和GNU gcj(GNU Compiler for Java)的改进才促成了这些附加部分
GCJ基础
首先 GNU gcj不是Java
然而 gcj的目标是实现一个完整的系统 该系统兼容于Java并且将预编译器(ahead of time piler)置于中心 它拥有一个基于GNU类路径的净化类库和一个内置的解释器 其编译器可以将Java源文件 类文件 甚至是整个jar文件编译成目标码
以前gcj对待Java采取的是一种 激进且传统 的方式 它认为Java好像是C++的某个不常用的方言似的 这么做有好的一面 然而不幸的是两者运行时的链接模型差异太大——因此当遇到一些规模比较大 复杂度比较高的Java应用时 这种方法就无能为力了 特别是面对那些有着复杂的类加载机制的Java应用时 显得尤为突出
在GCC 的发布版中 我们对gcj实现了一种新的编译方式 称之为二进制兼容性ABI(Binary Compatibility Application Binary Interface) 这种编译方式将所有的链接推迟到运行时刻进行并且完全实现了Java的二进制兼容规范——正好是让预编译的代码与类装载结合所需要的
我们还增加了一个类映射数据库 在运行时 只要我们定义好一个类 gcj运行时(叫做 libgcj )就会在数据库中寻找这个类 如果找到该类(注意我们这里使用的是类的 内容 而不仅仅是类名) 那么libgcj就会映射到该共享库中 该库包含了编译后的类
这两个改变使得我们可以做一些更强大的事情 我们可以预编译Java程序而不必要求任何应用级的改变 此外 由于采用了新的方式对字节码进行校验 我们还能确保编译的代码在运行时的类型安全
构建RPM
在Fedora Core上构建Java应用是很简单的——现存的构建方式不会发生变化 Fedora Core舶来了 Ant 并且使用来自Eclipse的Java编译器将Java代码编译成字节码
描述如何编写RPM已经超出了本文讨论的范围 但是Fedora RPM指南上有一些有用的信息 JPackage上也有一些Java特定的指南
一旦你的程序被编译成字节码 你就可以将他们编译为本地代码 因为gcj尚不包含一个即时编译器(JIT) 这就是其获得合理性能的方法 在某些情况下 其性能可能会超过已有即时编译器 因为gcj使用了共享库……当你同时运行应用程序的多个实例时 你就会看到这种巨大的差异
Fedora提供了两个程序 使得本地编译包的工作变得更简单 我们在构建RPM时会使用到他们
第一个程序是 aot pile rpm 它会搜索jar文件并且使用gcj将他们编译到共享库中 aot pile rpm知道一些gcj特定的技巧 例如在编译前将比较大的jar文件分割为若干个小的文件(在运行时编译一个大的jar文件将耗费大量内存资源) 在链接结果共享库时使用–Bsymbolic(这会导致运行时性能改善)
假如你没有在构建RPM 那么一个替代方案就是直接将程序中的jar文件编译到共享库中 这里我展示一个最简单的方法(我之前提到过 对于一个大的jar文件 这样做会非常慢)
gcj fjni findirect dispatch fPIC shared \\
Wl Bsymbolic o foo jar so
foo jar
分解一下
◆ fjni告诉gcj在Java代码中的本地方法(native methods)是用JNI实现的
◆ findirect dispatch告诉gcj使用二进制兼容性ABI(Application Binary Interface)
◆当构建一个共享库时我们需要使用 fPIC和 shared
◆ WI和 Bsymbolic告诉链接器在可能的情况下绑定共享库中的引用
Fedora Core提供的第二个有用的程序是rebuild gcj db 当安装或者卸载一个RPM改变了全局类映射数据库时 我们将使用该程序 并且该程序应该运行在RPM的%post和%postun部分
rebuild gcj db根据约定来运转——它假设每个包在目录/usr/lib/gcj(对于多架构操作系统中 位的包 目录为/usr/lib /gcj 有相应的RPM宏去解决这个问题)下的某个地方安装自己的类映射数据库 然后它循环遍历所有的这些个体数据库并且把他们整合到运行时使用的全局数据库中
注意到使用gcj去编译一个Java程序并不总是能成功的 Gcj的类库尚不完整 有时程序会使用到某些尚未实现的API 例如 Swing目前仍在积极开发中 同样 尽管Sun公司已经发布了警告 一些包使用了私有的 sun *或者sun *下的APIs ——然而一般来说 gcj并没有实现他们
谁在使用?
Fedora Core 使用了gcj来为很多应用程序进行编译
◆首先 Fedora包含了ant以及ant的很多依赖 以此来编译和运行其他Java程序 它也包含了Eclipse的Java编译器
◆Tomcat及其依赖
◆OpenOffice中的Java代码
◆Eclipse IDE和一些插件 比如CDT
Fedora 中的新面孔
◆RSSOwl 一个RSS阅读器
◆Azureus 一个强大的BitTorrent客户端
◆Frysk 一个用来监控运行的进程或线程的执行分析技术
JOnAS应用服务器 一个J EE实现 也在进行中但是它还尚未通过Fedora Extras的审查
接下来的工作
在过去的一年中 GNU Classpath社区向着目标大踏步地前进 我们期望在 年能继续保持这个势头 我们有一个经常更新的API比较页面 你可以在这里追踪我们API的状态
我们也在为gcj的核心改进而努力工作著 将编译器 运行时和类库更新到Java
最后 我们正在libgcj里实现Java的安全架构 这会实现一个Mozilla的插件和netx(Java Web Start的一个实现)
个人简介
cha138/Article/program/Java/hx/201311/25726相关参考
在fedora2上安装oracle10G的方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 安
oracle10G在fedora2上的安装 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &nb
用One-JAR简化应用程序交付 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 如果您曾经试图把
地球最核心部分。地核由三部分组成: (1)一层厚约1700公里的外部液体核, (2)一个半径1216公里的固体内核(比月亮略微大些), (3)围绕固体内核有一个厚约500公里的内过渡带。 多少
在这个网址下载一个调用ssh和scp命令的jar包 然后就可以写程序了将上面的jar包导入MyEclipse下面是一个类的实例代码 packagehh; importjavaioBuffer
在校园网的论坛上看到的一些题目放假了没有什么事做就想到了自己来试着做一些到今天才总是把它给做成了我想要实现的结果了有时候就是那样做了好久都没办法做出来到灵感来了的那一下一下子就
Java语言深入final在java中的应用 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!fina
Javasocket应用的几个小实例 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 用于本机上的
共享内存在Java中的实现和应用 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 共享内存对应应用
在Java中应用设计模式Singleton 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &nb