fbpx
维基百科

GCJ

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

GNU Compiler for Java
開發者The GNU Project
首次发布1998年9月6日,​24年前​(1998-09-06[1]
目前版本
  • 6.5 (2018年10月26日;穩定版本)[2]
操作系统Unix-like
类型Compiler
许可协议GNU GPL
网站gcc.gnu.org

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

历史

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

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

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

性能

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

Compiled Native Interface

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

两种方式的比较

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

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

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); } 

另见

  • Excelsior JET (另一个Java实现)
  • IcedTea
  • Kaffe
  • SableVM
  • JamVM
  • Apache Harmony
  • Jikes
  • GraalVM - GraalVM的本地映像功能使用了预编译技术,这使得它可以生成类文件可执行的二进制文件。
  • 自由的Java实现
  • Kotlin - Kotlin/Native是一种将Kotlin语言编译为本地可执行二进制文件而无需JVM的技术。它包括一个基于LLVM的后端和本地Kotlin库实现两个部分。

备注

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

参考资料

  1. ^ Anthony Green, Cygnus Solutions. GCJ announcement. [2020-08-07]. (原始内容于2017-07-11). 
  2. ^ GCC Releases - GNU Project. 
  3. ^ GCC Releases – GNU Project – Free Software Foundation (FSF). [2020-08-07]. (原始内容于2015-06-23). 
  4. ^ . [2010-04-22]. (原始内容存档于2007-05-09). 
  5. ^ Campbell, Bill. Introduction to Compiler Construction in a Java World. CRC Press Taylor & Francis Group. 2013 [2014-02-06]. ISBN 978-1-4398-6088-5. (原始内容于2020-08-12). 
  6. ^ 存档副本. [2020-08-07]. (原始内容于2020-09-04). 
  7. ^ 存档副本. [2020-08-07]. (原始内容于2016-08-20). 
  8. ^ . 2007-01-08 [2007-05-20]. (原始内容存档于2007-05-09). 
  9. ^ GCC Frequently Asked Questions - GNU Project - Free Software Foundation (FSF). gcc.gnu.org. [2020-08-01]. (原始内容于2020-06-12). 
  10. ^ GCC Looks To Turn Off Java, Replace With Go Or ADA. [2020-08-07]. (原始内容于2020-07-25). 
  11. ^ Andrew Haley. [gcc] Revision 240661. 2016-09-30 [2020-08-07]. (原始内容于2019-06-16). 
  12. ^ Tromey, Tom. The Deletion of gcj. The Cliffs of Inanity. 2016-10-02 [2016-10-03]. (原始内容于2020-07-25). 
  13. ^ GCC 7 Release Series: Changes, New Features, and Fixes. [2017-05-09]. (原始内容于2020-09-02). 
  14. ^ (PDF). [2009-08-02]. (原始内容 (PDF)存档于2011-06-07). 
  15. ^ The GCJ FAQ - GNU Project - Free Software Foundation (FSF). [2020-08-07]. (原始内容于2016-10-20). 
  16. ^ 这个例子来源于 https://gcc.gnu.org/onlinedocs/gcj/Objects-and-Classes.html#Objects-and-Classes (页面存档备份,存于互联网档案馆

外部链接

  • . GCC. GNU. 2007-03-30 [2012-08-29]. (原始内容存档于2007-05-09). 
  • . [2012-08-29]. (原始内容存档于2012-08-17). 
  • . GCJ Manual. [2012-08-29]. (原始内容存档于2012-08-29). 
  • Wielaard, Mark. GCJ - past, present, and future. LWN. 2005-04-06. (原始内容于2019-08-02). 

java编译器, 英語, compiler, java, 是一个自由的java编译器, 它是gcc, compiler, collection, 的一部分, 已有十多年的历史, 但自2017年起, gnu宣布不再对其进行维护, 也不会在gnu的后继版本中包括它, compiler, java開發者the, project首次发布1998年9月6日, 24年前, 1998, 目前版本6, 2018年10月26日, 穩定版本, 操作系统unix, like类型compiler许可协议gnu, gpl网站gcc, org. GNU Java编译器 英語 GNU Compiler for Java GCJ 是一个自由的Java编译器 它是GCC GNU Compiler Collection 的一部分 已有十多年的历史 但自2017年起 GNU宣布不再对其进行维护 也不会在GNU的后继版本中包括它 4 5 GNU Compiler for Java開發者The GNU Project首次发布1998年9月6日 24年前 1998 09 06 1 目前版本6 5 2018年10月26日 穩定版本 2 操作系统Unix like类型Compiler许可协议GNU GPL网站gcc wbr gnu wbr orgGCJ可将Java 源代码编译为Java虚拟机字节码或适用于不同架构的机器码 它还可以将包含字节码的类文件和整个jar文件编译为机器代码 6 7 目录 1 历史 2 性能 3 Compiled Native Interface 3 1 两种方式的比较 4 另见 5 备注 6 参考资料 7 外部链接历史 编辑GCJ的运行时库来源于GNU Classpath项目 但libgcj库之间有一些区别 GCJ4 3使用了Eclipse Java编译器作为编译前端 8 在2007年 GNU做了许多工作来在GNU Classpath中实现两个重要的Java图形库 AWT库和Swing库 首先尝试实现的为AWT库 当AWT库实现后 便可以开始考虑实现Swing库 这时至少有一种自由的方式来实现Swing 9 但是GCJ从未支持到Java1 2以及更高的版本 现在来看该项目已被完全放弃 直至2015年 GCJ未进行任何的开发 并且该项目被标记为维护模式 在这段时间 自由的Java实现主要在OpenJDK项目中进行 10 GCC在2016年9月30日被从GCC工具链中移除 11 12 该通知随GCC7 1版本的发布而发布 13 而GCC6中仍包括GCJ 性能 编辑使用GCJ将Java源码编译为机器代码后 其启动时间一般比使用JVM运行等效字节码的启动时间更快 14 Compiled Native Interface 编辑Compiled Native Interface CNI 原名 Cygnus Native Interface 是一个GCJ软件框架 与JNI Java Native Interface 类似 它允许Java程序访问和使用本机共享库 在各个平台和不同的硬件类型中有所不同 和使用C 编写的共享库 两种方式的比较 编辑 CNI的作者对于CNI和JNI的评价如下 15 我们之所以使用CNI 是因为我们认为它是一个更好的实现方案 因为该实现是基于Java可以使用标准编译技术实现另一种编程语言的思想 并且我们认为使用GCC实现的语言应该恰当地在某些方面兼容 因此我们认为 Java的函数调用约定应该与其他语言 尤其是C 使用的调用约定相似 因为我们可以将Java视为一个C 的子集 CNI实现了一组函数集并规定了有关的调用约定 且其设计时基于C 和Java应具有相同的调用约定和对象布局的思想 因此它们是二进制兼容的 a CNI依赖于类似于C 的Java类 例如这是一个Java类 16 public class Int public int i public Int int i this i i public static Int zero new Int 0 于是就可以这样使用 include lt gcj cni h gt include lt Int gt Int mult Int p int k if k 0 return Int zero 静态成员访问 return new Int p gt i k 另见 编辑Excelsior JET 另一个Java实现 IcedTea Kaffe SableVM JamVM Apache Harmony Jikes GraalVM GraalVM的本地映像功能使用了预编译技术 这使得它可以生成类文件可执行的二进制文件 自由的Java实现 Kotlin Kotlin Native是一种将Kotlin语言编译为本地可执行二进制文件而无需JVM的技术 它包括一个基于LLVM的后端和本地Kotlin库实现两个部分 备注 编辑 这句话的意思是 CNI的理念是在编译层面使Java和C 做到尽量兼容 而这需要Java和C 的编译器的某些标准一致 GNU计划刚好既实现了Java编译器 又实现了C 编译器 因此很容易在编译器层面对其进行调整 使其更易用 性能更高 参考资料 编辑 Anthony Green Cygnus Solutions GCJ announcement 2020 08 07 原始内容存档于2017 07 11 GCC Releases GNU Project GCC Releases GNU Project Free Software Foundation FSF 2020 08 07 原始内容存档于2015 06 23 Archived copy 2010 04 22 原始内容存档于2007 05 09 Campbell Bill Introduction to Compiler Construction in a Java World CRC Press Taylor amp Francis Group 2013 2014 02 06 ISBN 978 1 4398 6088 5 原始内容存档于2020 08 12 存档副本 2020 08 07 原始内容存档于2020 09 04 存档副本 2020 08 07 原始内容存档于2016 08 20 gcj to use Eclipse compiler as a front end 2007 01 08 2007 05 20 原始内容存档于2007 05 09 GCC Frequently Asked Questions GNU Project Free Software Foundation FSF gcc gnu org 2020 08 01 原始内容存档于2020 06 12 GCC Looks To Turn Off Java Replace With Go Or ADA 2020 08 07 原始内容存档于2020 07 25 Andrew Haley gcc Revision 240661 2016 09 30 2020 08 07 原始内容存档于2019 06 16 Tromey Tom The Deletion of gcj The Cliffs of Inanity 2016 10 02 2016 10 03 原始内容存档于2020 07 25 GCC 7 Release Series Changes New Features and Fixes 2017 05 09 原始内容存档于2020 09 02 GCJ The GNU Static Java Compiler PDF 2009 08 02 原始内容 PDF 存档于2011 06 07 The GCJ FAQ GNU Project Free Software Foundation FSF 2020 08 07 原始内容存档于2016 10 20 这个例子来源于 https gcc gnu org onlinedocs gcj Objects and Classes html Objects and Classes 页面存档备份 存于互联网档案馆 外部链接 编辑Official website GCC GNU 2007 03 30 2012 08 29 原始内容存档于2007 05 09 GCJ 手册 2012 08 29 原始内容存档于2012 08 17 About CNI GCJ Manual 2012 08 29 原始内容存档于2012 08 29 Wielaard Mark GCJ past present and future LWN 2005 04 06 原始内容存档于2019 08 02 取自 https zh wikipedia org w index php title GCJ amp oldid 64134098, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。