GCJ

出自Local Chinese Wikipedia
跳至導覽 跳至搜尋

頁面Module:Infobox/styles.css沒有內容。

GNU Compiler for Java
腳本錯誤:沒有「InfoboxImage」這個模塊。
腳本錯誤:沒有「InfoboxImageVariant」這個模塊。
開發者The GNU Project
首次發布1998年9月6日,​腳本錯誤:沒有「TimeAgo」這個模塊。​(1998-09-06[1]
最終版本Template:Software version
原始碼庫頁面Template:Plainlist/styles.css沒有內容。Template:EditAtWikidata
引擎頁面Template:Plainlist/styles.css沒有內容。
    腳本錯誤:沒有「Wd」這個模塊。
Template:EditAtWikidata
作業系統Unix-like
類型Compiler
許可協議GNU GPL
網站gcc.gnu.org
腳本錯誤:沒有「Template wrapper」這個模塊。

腳本錯誤:沒有「Check for unknown parameters」這個模塊。

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. 腳本錯誤:沒有「citation/CS1」這個模塊。
  2. 腳本錯誤:沒有「citation/CS1」這個模塊。
  3. 腳本錯誤:沒有「citation/CS1」這個模塊。
  4. 腳本錯誤:沒有「citation/CS1」這個模塊。
  5. 腳本錯誤:沒有「citation/CS1」這個模塊。
  6. 腳本錯誤:沒有「citation/CS1」這個模塊。
  7. 腳本錯誤:沒有「citation/CS1」這個模塊。
  8. 腳本錯誤:沒有「citation/CS1」這個模塊。
  9. 腳本錯誤:沒有「citation/CS1」這個模塊。
  10. 腳本錯誤:沒有「citation/CS1」這個模塊。
  11. 腳本錯誤:沒有「citation/CS1」這個模塊。
  12. 腳本錯誤:沒有「citation/CS1」這個模塊。
  13. 腳本錯誤:沒有「citation/CS1」這個模塊。
  14. 這個例子來源於 https://gcc.gnu.org/onlinedocs/gcj/Objects-and-Classes.html#Objects-and-Classes頁面存檔備份,存於網際網路檔案館

外部連結[編輯]

  • 腳本錯誤:沒有「citation/CS1」這個模塊。
  • 腳本錯誤:沒有「citation/CS1」這個模塊。
  • 腳本錯誤:沒有「citation/CS1」這個模塊。
  • 腳本錯誤:沒有「citation/CS1」這個模塊。

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