GCJ

来自Local Chinese Wikipedia
imported>Willy1018-bot2025年6月25日 (三) 07:38的版本 BOTR:批量替換所有lang-xx模板為langx模板)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转到导航 跳转到搜索

页面Module:Infobox/styles.css没有内容。

GNU Compiler for Java
File:Gcj2.png
開發者The GNU Project
首次发布1998年9月6日,​27年前​(1998-09-06[1]
最终版本Template:Software version
操作系统Unix-like
类型Compiler
许可协议GNU GPL
网站gcc.gnu.org
页面Module:Infobox/styles.css没有内容。

GNU Java编译器Template:LangxGCJ)是一个自由的Java编译器。它是GCC(GNU Compiler Collection)的一部分,已有十多年的历史。但自2017年起,GNU宣布不再对其进行维护,也不会在GNU的后继版本中包括它。[2][3]

GCJ可将Java 源代码编译为Java虚拟机字节码或适用于不同架构的机器码。它还可以将包含字节码的类文件和整个jar文件编译为机器代码。[4][5]

历史[编辑]

GCJ的运行时库来源于GNU Classpath项目,但libgcj库之间有一些区别。GCJ4.3使用了Eclipse Java编译器作为编译前端。[6]

在2007年,GNU做了许多工作来在GNU Classpath中实现两个重要的Java图形库:AWT库和Swing库。首先尝试实现的为AWT库,当AWT库实现后,便可以开始考虑实现Swing库。这时至少有一种自由的方式来实现Swing。[7]但是GCJ从未支持到Java1.2以及更高的版本。现在来看该项目已被完全放弃。

直至2015年,GCJ未进行任何的开发,并且该项目被标记为维护模式。在这段时间,自由的Java实现主要在OpenJDK项目中进行。[8]GCJ在2016年9月30日被从GCC工具链中移除。[9][10]该通知随GCC7.1版本的发布而发布。[11]而GCC6中仍包括GCJ。

性能[编辑]

使用GCJ将Java源码编译为机器代码后,其启动时间一般比使用JVM运行等效字节码的启动时间更快。[12]

Compiled Native Interface[编辑]

Compiled Native Interface (CNI), 原名"Cygnus Native Interface", 是一个GCJ软件框架。与JNI(Java Native Interface)类似,它允许Java程序访问和使用本机共享库(在各个平台和不同的硬件类型中有所不同)和使用C++编写的共享库。

两种方式的比较[编辑]

CNI的作者对于CNI和JNI的评价如下:[13]

CNI依赖于类似于C++的Java类。例如这是一个Java类:[14]

public class Int
{
   public int i;
   public Int(int i) { this.i = i; }
   public static Int zero = new Int(0);
}

于是就可以这样使用:

#include <gcj/cni.h>
#include <Int>

Int *mult(Int *p, int k)
{
  if (k == 0)
    return Int::zero;  // 静态成员访问
  return new Int(p->i * k);
}

另见[编辑]

备注[编辑]

  1. 这句话的意思是,CNI的理念是在编译层面使Java和C++做到尽量兼容,而这需要Java和C++的编译器的某些标准一致。GNU计划刚好既实现了Java编译器,又实现了C++编译器,因此很容易在编译器层面对其进行调整,使其更易用,性能更高。

参考资料[编辑]

  1. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
  2. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
  3. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
  4. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
  5. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
  6. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
  7. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
  8. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
  9. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
  10. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
  11. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
  12. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
  13. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
  14. 这个例子来源于 https://gcc.gnu.org/onlinedocs/gcj/Objects-and-Classes.html#Objects-and-Classes页面存档备份,存于互联网档案馆

外部链接[编辑]

  • package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
  • package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
  • package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
  • package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found

package.lua第80行Lua错误:module 'Module:Navbar/configuration' not foundpackage.lua第80行Lua错误:module 'Module:Navbar/configuration' not found