GNU Java編譯器(英語:GNU Compiler for JavaGCJ)是一個自由的Java編譯器。它是GCC(GNU Compiler Collection)的一部分,已有十多年的歷史。但自2017年起,GNU宣佈不再對其進行維護,也不會在GNU的後繼版本中包括它。[3][4]

Quick Facts 開發者, 首次發佈 ...
GNU Compiler for Java
Thumb
開發者The GNU Project
首次發佈1998年9月6日,​26年前​(1998-09-06[1]
最終版本
  • 6.5(2018年10月26日;穩定版本)[2]
編輯維基數據鏈接
作業系統Unix-like
類型Compiler
許可協議GNU GPL
網站gcc.gnu.org
Close

GCJ可將Java 原始碼編譯為Java虛擬機字節碼或適用於不同架構的機器碼。它還可以將包含字節碼的類文件和整個jar文件編譯為機器代碼。[5][6]

歷史

GCJ的運行時庫來源於GNU Classpath項目,但libgcj庫之間有一些區別。GCJ4.3使用了Eclipse Java編譯器作為編譯前端。[7]

在2007年,GNU做了許多工作來在GNU Classpath中實現兩個重要的Java圖形庫:AWT庫和Swing庫。首先嘗試實現的為AWT庫,當AWT庫實現後,便可以開始考慮實現Swing庫。這時至少有一種自由的方式來實現Swing。[8]但是GCJ從未支持到Java1.2以及更高的版本。現在來看該項目已被完全放棄。

直至2015年,GCJ未進行任何的開發,並且該項目被標記為維護模式。在這段時間,自由的Java實現主要在OpenJDK項目中進行。[9] GCJ在2016年9月30日被從GCC工具鏈中移除。[10][11] 該通知隨GCC7.1版本的發佈而發佈。[12] 而GCC6中仍包括GCJ。

性能

使用GCJ將Java源碼編譯為機器代碼後,其啟動時間一般比使用JVM運行等效字節碼的啟動時間更快。[13]

Compiled Native Interface

Compiled Native Interface (CNI), 原名"Cygnus Native Interface", 是一個GCJ軟件框架。與JNI(Java Native Interface)類似,它允許Java程序訪問和使用本機共享庫(在各個平台和不同的硬件類型中有所不同)和使用C++編寫的共享庫。

兩種方式的比較

CNI的作者對於CNI和JNI的評價如下:[14]

CNI依賴於類似於C++的Java類。例如這是一個Java類:[15]

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庫實現兩個部分。

備註

參考資料

外部連結

Wikiwand in your browser!

Seamless Wikipedia browsing. On steroids.

Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.

Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.