<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=GCJ</id>
	<title>GCJ - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=GCJ"/>
	<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=GCJ&amp;action=history"/>
	<updated>2026-07-13T15:25:09Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://arolstar52-zhtest.hf.space/index.php?title=GCJ&amp;diff=1868767&amp;oldid=prev</id>
		<title>imported&gt;Willy1018-bot：​BOTR：批量替換所有lang-xx模板為langx模板</title>
		<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=GCJ&amp;diff=1868767&amp;oldid=prev"/>
		<updated>2025-06-25T07:38:05Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/%E6%9C%BA%E5%99%A8%E4%BA%BA/%E4%BD%9C%E4%B8%9A%E8%AF%B7%E6%B1%82#.E8.AB.8B.E6.B1.82.E6.89.B9.E9.87.8F.E6.9B.BF.E6.8F.9B.E6.89.80.E6.9C.89lang-xx.E6.A8.A1.E6.9D.BF.E7.82.BAlangx.E6.A8.A1.E6.9D.BF&quot; class=&quot;extiw&quot; title=&quot;wikipedia:机器人/作业请求&quot;&gt;BOTR&lt;/a&gt;：批量替換所有lang-xx模板為langx模板&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Infobox software&lt;br /&gt;
| name                   = GNU Compiler for Java&lt;br /&gt;
| logo                   = Gcj2.png&lt;br /&gt;
| logo size              = 70px&lt;br /&gt;
| screenshot             =&lt;br /&gt;
| caption                =&lt;br /&gt;
| developer              = [[GNU|The GNU Project]]&lt;br /&gt;
| released               = {{Start date and age|1998|09|06}}&amp;lt;ref&amp;gt;{{cite web|url=https://gcc.gnu.org/news/gcj-announce.txt|author=Anthony Green, Cygnus Solutions|title=GCJ announcement|accessdate=2020-08-07|archive-date=2017-07-11|archive-url=https://web.archive.org/web/20170711114719/https://gcc.gnu.org/news/gcj-announce.txt|dead-url=no}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
| discontinued           = yes&lt;br /&gt;
| operating system       = [[Unix-like]]&lt;br /&gt;
| programming language   =&lt;br /&gt;
| genre                  = [[Compiler]]&lt;br /&gt;
| license                = [[GNU General Public License|GNU GPL]]&lt;br /&gt;
| website                = {{URL|https://gcc.gnu.org}}&lt;br /&gt;
}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;GNU Java编译器&amp;#039;&amp;#039;&amp;#039;（{{langx|en|GNU Compiler for Java}}，&amp;#039;&amp;#039;&amp;#039;GCJ&amp;#039;&amp;#039;&amp;#039;）是一个[[自由]]的Java编译器。它是[[GCC]]（GNU Compiler Collection）的一部分，已有十多年的历史。但自2017年起，GNU宣布不再对其进行维护，也不会在GNU的后继版本中包括它。&amp;lt;ref&amp;gt;{{cite web |url=https://gcc.gnu.org/java/ |title=Archived copy |accessdate=2010-04-22 |archiveurl=https://web.archive.org/web/20070509055923/http://gcc.gnu.org/java/ |archivedate=2007-05-09 |dead-url=yes }}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{cite book |last=Campbell |first=Bill |date=2013 |title=Introduction to Compiler Construction in a Java World |url=https://books.google.com/books?id=-b8WjLY2eKEC&amp;amp;pg=PA277 |location= |publisher=CRC Press Taylor &amp;amp; Francis Group |isbn=978-1-4398-6088-5 |accessdate=2014-02-06 |archive-date=2020-08-12 |archive-url=https://web.archive.org/web/20200812045841/https://books.google.com/books?id=-b8WjLY2eKEC&amp;amp;pg=PA277 |dead-url=no }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
GCJ可将Java 源代码编译为Java虚拟机字节码或适用于不同架构的机器码。它还可以将包含字节码的类文件和整个jar文件编译为机器代码。&amp;lt;ref&amp;gt;{{Cite web |url=https://www.linuxjournal.com/article/4860 |title=存档副本 |accessdate=2020-08-07 |archive-date=2020-09-04 |archive-url=https://web.archive.org/web/20200904162252/https://www.linuxjournal.com/article/4860 |dead-url=no }}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{Cite web |url=http://freecode.com/projects/gcj |title=存档副本 |accessdate=2020-08-07 |archive-date=2016-08-20 |archive-url=https://web.archive.org/web/20160820232250/http://freecode.com/projects/gcj |dead-url=no }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==历史==&lt;br /&gt;
GCJ的运行时库来源于[[GNU Classpath]]项目，但libgcj库之间有一些区别。GCJ4.3使用了[[Eclipse]] Java编译器作为编译前端。&amp;lt;ref&amp;gt;{{cite web|title=gcj to use Eclipse compiler as a front end|url=https://gcc.gnu.org/java/|accessdate=2007-05-20|author=|date=2007-01-08|format=|publisher=|language=|archiveurl=https://web.archive.org/web/20070509055923/http://gcc.gnu.org/java/|archivedate=2007-05-09|dead-url=yes}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
在2007年，GNU做了许多工作来在GNU Classpath中实现两个重要的Java图形库：[[AWT]]库和[[Swing (Java)|Swing]]库。首先尝试实现的为AWT库，当AWT库实现后，便可以开始考虑实现Swing库。这时至少有一种自由的方式来实现Swing。&amp;lt;ref&amp;gt;{{Cite web|title=GCC Frequently Asked Questions - GNU Project - Free Software Foundation (FSF)|url=https://gcc.gnu.org/faq.html|accessdate=2020-08-01|work=gcc.gnu.org|archive-date=2020-06-12|archive-url=https://web.archive.org/web/20200612061701/http://gcc.gnu.org/faq.html|dead-url=no}}&amp;lt;/ref&amp;gt;但是GCJ从未支持到Java1.2以及更高的版本。现在来看该项目已被完全放弃。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--Not sure if this non-development for years contradicts above &amp;quot;AWT is still in development&amp;quot; as that is not a compiler (but would appear in &amp;quot;News&amp;quot;?)--&amp;gt;直至2015年，GCJ未进行任何的开发，并且该项目被标记为维护模式。在这段时间，自由的Java实现主要在[[OpenJDK]]项目中进行。&amp;lt;ref&amp;gt;{{Cite web |url=https://www.phoronix.com/scan.php?page=news_item&amp;amp;px=MTUwOTA |title=GCC Looks To Turn Off Java, Replace With Go Or ADA |accessdate=2020-08-07 |archive-date=2020-07-25 |archive-url=https://web.archive.org/web/20200725050429/https://www.phoronix.com/scan.php?page=news_item&amp;amp;px=MTUwOTA |dead-url=no }}&amp;lt;/ref&amp;gt;GCJ在2016年9月30日被从[[GCC]]工具链中移除。&amp;lt;ref&amp;gt;{{cite web|url=https://gcc.gnu.org/viewcvs/gcc?view=revision&amp;amp;revision=240661|title=[gcc] Revision 240661|date=2016-09-30|author=Andrew Haley|accessdate=2020-08-07|archive-date=2019-06-16|archive-url=https://web.archive.org/web/20190616091623/https://gcc.gnu.org/viewcvs/gcc?view=revision|dead-url=no}}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{Cite web|url=https://tromey.com/blog/?p=911|title=The Deletion of gcj|last=Tromey|first=Tom|date=2016-10-02|website=The Cliffs of Inanity|publisher=|access-date=2016-10-03|archive-date=2020-07-25|archive-url=https://web.archive.org/web/20200725053717/https://tromey.com/blog/?p=911|dead-url=no}}&amp;lt;/ref&amp;gt;该通知随GCC7.1版本的发布而发布。&amp;lt;ref&amp;gt;{{cite web|url=https://gcc.gnu.org/gcc-7/changes.html|title=GCC 7 Release Series: Changes, New Features, and Fixes|access-date=2017-05-09|archive-date=2020-09-02|archive-url=https://web.archive.org/web/20200902223230/https://gcc.gnu.org/gcc-7/changes.html|dead-url=no}}&amp;lt;/ref&amp;gt;而GCC6中仍包括GCJ。&lt;br /&gt;
&lt;br /&gt;
==性能==&lt;br /&gt;
使用GCJ将Java源码编译为机器代码后，其启动时间一般比使用JVM运行等效字节码的启动时间更快。&amp;lt;ref&amp;gt;{{Cite web|title=GCJ: The GNU Static Java Compiler|url=http://www.hpl.hp.com/personal/Hans_Boehm/misc_slides/gcj2.pdf|access-date=2009-08-02|archive-url=https://web.archive.org/web/20110607102558/http://www.hpl.hp.com/personal/Hans_Boehm/misc_slides/gcj2.pdf|archive-date=2011-06-07|dead-url=yes}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compiled Native Interface==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Compiled Native Interface&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;&amp;#039;CNI&amp;#039;&amp;#039;&amp;#039;), 原名&amp;quot;Cygnus Native Interface&amp;quot;, 是一个GCJ软件框架。与JNI（[[Java Native Interface]]）类似，它允许Java程序访问和使用本机[[共享库]]（在各个平台和不同的硬件类型中有所不同）和使用C++编写的共享库。&lt;br /&gt;
&lt;br /&gt;
===两种方式的比较===&lt;br /&gt;
CNI的作者对于CNI和JNI的评价如下：&amp;lt;ref&amp;gt;{{Cite web |url=https://gcc.gnu.org/java/faq.html#2_3 |title=The GCJ FAQ - GNU Project - Free Software Foundation (FSF)&amp;lt;!-- Bot generated title --&amp;gt; |accessdate=2020-08-07 |archive-date=2016-10-20 |archive-url=https://web.archive.org/web/20161020222532/https://gcc.gnu.org/java/faq.html#2_3 |dead-url=no }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{cquote|我们之所以使用CNI，是因为我们认为它是一个更好的实现方案。因为该实现是基于Java可以使用标准编译技术实现另一种编程语言的思想，并且我们认为使用GCC实现的语言应该恰当地在某些方面兼容。因此我们认为，Java的函数调用约定应该与其他语言（尤其是C ++）使用的调用约定相似。因为我们可以将Java视为一个C ++的子集。CNI实现了一组函数集并规定了有关的调用约定，且其设计时基于C ++和Java应具有相同的调用约定和对象布局的思想，因此它们是二进制兼容的{{efn|1=这句话的意思是，CNI的理念是在编译层面使Java和C++做到尽量兼容，而这需要Java和C++的编译器的某些标准一致。GNU计划刚好既实现了Java编译器，又实现了C++编译器，因此很容易在编译器层面对其进行调整，使其更易用，性能更高。}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
CNI依赖于类似于C++的Java类。例如这是一个Java类：&amp;lt;ref&amp;gt;这个例子来源于 https://gcc.gnu.org/onlinedocs/gcj/Objects-and-Classes.html#Objects-and-Classes {{Wayback|url=https://gcc.gnu.org/onlinedocs/gcj/Objects-and-Classes.html#Objects-and-Classes |date=20161020222612 }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Int&lt;br /&gt;
{&lt;br /&gt;
   public int i;&lt;br /&gt;
   public Int(int i) { this.i = i; }&lt;br /&gt;
   public static Int zero = new Int(0);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
于是就可以这样使用：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;gcj/cni.h&amp;gt;&lt;br /&gt;
#include &amp;lt;Int&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Int *mult(Int *p, int k)&lt;br /&gt;
{&lt;br /&gt;
  if (k == 0)&lt;br /&gt;
    return Int::zero;  // 静态成员访问&lt;br /&gt;
  return new Int(p-&amp;gt;i * k);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==另见==&lt;br /&gt;
&lt;br /&gt;
* [[Excelsior JET]] (另一个Java实现)&lt;br /&gt;
* [[IcedTea]]&lt;br /&gt;
* [[Kaffe]]&lt;br /&gt;
* [[SableVM]]&lt;br /&gt;
* [[JamVM]]&lt;br /&gt;
* [[Apache Harmony]]&lt;br /&gt;
* [[Jikes]]&lt;br /&gt;
* [[GraalVM]] - GraalVM的本地映像功能使用了预编译技术，这使得它可以生成类文件可执行的二进制文件。&lt;br /&gt;
* [[自由的Java实现]]&lt;br /&gt;
* [[Kotlin]] - Kotlin/Native是一种将Kotlin语言编译为本地可执行二进制文件而无需JVM的技术。它包括一个基于[[LLVM]]的后端和本地Kotlin库实现两个部分。&lt;br /&gt;
&lt;br /&gt;
== 备注 ==&lt;br /&gt;
{{notelist}}&lt;br /&gt;
&lt;br /&gt;
==参考资料==&lt;br /&gt;
{{Reflist}}&lt;br /&gt;
&lt;br /&gt;
==外部链接==&lt;br /&gt;
* {{cite web |url= http://gcc.gnu.org/java/ |title= Official website |publisher= GNU |work= GCC |date= 2007-03-30 |archive-date= 2007-05-09 |archive-url= https://web.archive.org/web/20070509055923/http://gcc.gnu.org/java/ |accessdate= 2012-08-29 |dead-url= yes }}&lt;br /&gt;
* {{cite web |url= http://gcc.gnu.org/onlinedocs/gcj/ |title= GCJ 手册 |archive-date= 2012-08-17 |archive-url= https://web.archive.org/web/20120817180324/http://gcc.gnu.org/onlinedocs/gcj/ |accessdate= 2012-08-29 |dead-url= yes }}&lt;br /&gt;
* {{cite web |url= http://gcc.gnu.org/onlinedocs/gcj/About-CNI.html |title= About CNI |work= GCJ Manual |archive-date= 2012-08-29 |archive-url= https://web.archive.org/web/20120829093638/http://gcc.gnu.org/onlinedocs/gcj/About-CNI.html |accessdate= 2012-08-29 |dead-url= yes }}&lt;br /&gt;
* {{cite web|url=https://lwn.net/Articles/130796/|accessdate=|format=|publisher=LWN|language=|title=GCJ - past, present, and future|first=Mark|last=Wielaard|author=|date=2005-04-06|archive-date=2019-08-02|archive-url=https://web.archive.org/web/20190802072307/https://lwn.net/Articles/130796/|dead-url=no}}&lt;br /&gt;
&lt;br /&gt;
{{Java Virtual Machine}}{{Java (Oracle)}}&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Gnu Compiler For Java}}&lt;br /&gt;
[[Category:Free compilers and interpreters]]&lt;br /&gt;
[[Category:GNU Project software|Java]]&lt;br /&gt;
[[Category:Java compilers]]&lt;br /&gt;
[[Category:Discontinued Java virtual machines]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Willy1018-bot</name></author>
	</entry>
</feed>