A GNU Compiler for Java (GCJ vagy gcj) egy szabad szoftver fordítóprogram a Java programozási nyelvhez és része a GNU fordító gyűjteménynek. Több mint tíz évig a GNU Compiler Collection része volt, de 2017-től már nem tartják karban, és nem lesz része a jövőbeni kiadásoknak. A GCC 7-től kezdve a GCC Java frontend és a hozzá tartozó libjava futásidejű könyvtár eltávolításra került a GCC-ből. Az aktuális utolsó állapot szerint a GCJ legfeljebb a Java 1.4-es verzióját támogatja, és nem támogatja a JDK 1.5-ben bevezetett újabb nyelvi és futásidejű funkciókat.

A GCJ képes a Java kódot lefordítani JVM bájtkódra, vagy direkt módon a számos CPU architektúra bármelyikének gépi kódjára. Képes továbbá lefordítani bájt kódot tartalmazó class fájlokat vagy teljes JAR fájlokat gépi kódra.

Története Csaknem minden futtatókörnyezet könyvtár (angolul runtime library), amit a gcj használ a GNU Classpath projektből jön, (de különböznek a libgcj könyvtáraitól). A gcj a 4.3 verziótól, össze lett integrálva az ecj-vel, ami az Eclipse java fordítója.

A 2007-es állapot szerint rengeteg munkát öltek bele abba, hogy a GNU Classpath támogassa a Java két grafikus API-jét: AWT-t és Swing-et. 2008 táján az AWT-s támogatásához a munka folyamatban volt, az akkori állítás szerint a Swing-es támogatási projektet ez után tervezték folytatni.The GCJ FAQ - GNU Project - Free Software Foundation (FSF) Ez a fejlesztés a jelek szerint nem történt meg. A GNU CLASSPATH fejlesztés még a Java 1.2-vel kompatibilis állapotig sem készült el, és a 2010–2020-as években úgy tűnik, hogy teljesen felhagytak a fejlesztésével (abandoned állapotban van).

2009-es állapot szerint nem jelentettek be újabb fejlesztéseket a gcj-től. A termék jelenleg csak karbantartási üzemmódban van.

Teljesítmény A GCJ-vel gépi kódra lefordított Java kódnak elvileg gyorsabban kéne elindulnia, mint a vele ekvivalens a JVM által elindított bájtkódnak.GCJ: The GNU Static Java Compiler

Habár az indulás után a GCJ-vel fordított Java kód nem szükségszerűen hajtódik végre gyorsabban, mint a modern JIT-engedélyezett JVM által végrehajtott bájt kód.

Ez még akkor is igaz, ha a GCJ-t haladó szintű optimalizációs opciókkal hívják meg, mint pl. a -fno-bounds-check -O3 -mfpmath=sse -msse2 -ffast-math -march=native;. Ebben az esetben a lefordított program akár felül is múlhatja a JVM teljesítményét, persze attól függően, hogy milyen műveleteket hajt végre a kód az adott esetben.

CNI - lefordított natív interfész A CNI (Compiled Native Interface, korábban Cygnus Native Interface), egy szoftverkeretrendszer a gcj-hez, mely lehetővé teszi a Java kódnak, hogy hívjon natív alkalmazásokat (azaz olyan programokat, melyek hardver és operációs rendszer platform specifikusak), C++-ban írt könyvtárakat ill. ezekből is hívható legyen.

A CNI meglehetősen hasonlít a Java Native Interface (JNI) keretrendszerre, amely sztenderdként jön számos Java virtuális géppel, habár a CNI szerzők azt állítják, hogy számos előnye van a JNI-vel szemben:The GCJ FAQ - GNU Project - Free Software Foundation (FSF)

CNI attól függ, hogy a Java osztályok hogyan jelennek meg C++ osztályokként. PéldáulThe example comes from: http://gcc.gnu.org/onlinedocs/gcj/Objects-and-Classes.html#Objects-and-Classes adott egy Java osztály, public class Int { public int i; public Int(int i) { this.i = i; } public static Int zero = new Int(0); } melyet így lehet használni: #include <gcj/cni.h> #include <Int>

Int *mult(Int *p, int k) { if (k == 0) return Int::zero; // Static member access. return new Int(p->i * k); }

Kapcsolódó szócikkek

GNU Interpreter for Java (GIJ) IcedTea Jikes C to Java Virtual Machine compilers Szabad java implementációk

Jegyzetek

További információk GCJ honlapja GCJ kézikönyv About CNI section of GCJ Manual LWN: GCJ - past, present, and future - the article discuss some history of GCJ.

Fordítás

Kategória:Java virtuális gépek Kategória:GNU projektek