GNU Compiler for Java

From Wikipedia, the free encyclopedia
  (Redirected from GCJ)
Jump to: navigation, search
GNU Compiler for Java
Developer(s) The GNU Project
Operating system Unix-like
Type Compiler
License GNU GPL

The GNU Compiler for Java (GCJ) is a free compiler for the Java programming language and a part of the GNU Compiler Collection.[1][2]

GCJ can compile Java source code to Java Virtual Machine bytecode or to machine code for a number of CPU architectures. It can also compile class files and whole JARs that contain bytecode.[3][4]


The GCJ runtime-libraries original source is from GNU Classpath project, but there is a code difference between the libgcj libraries. GCJ 4.3 integrates with ecj[clarify], the Eclipse Compiler for Java.[5]

In 2007 a lot of work was done to implement support for Java's two graphical APIs in GNU Classpath: AWT and Swing.

As of 2013 there have been no new developments announced from GCJ[6] and the product is currently in maintenance mode.

Software support for AWT is still in development. The next planned support feature after AWT support is a software support for Swing.[7]


The compilation function in GCJ should have a faster start-up time than the equivalent bytecode launched in a JVM when compiling Java code into machine code.[8]

CNI (Compiled Native Interface)[edit]

The CNI (Compiled Native Interface, previously named 'Cygnus Native Interface') is a software framework for the GCJ that allows Java code to call, and be called, by native applications (programs specific to a hardware and operating-system platform) and libraries written in C++.

CNI closely resembles the JNI (Java Native Interface) framework which comes as a standard with various Java virtual machines.

Comparison of language use[edit]

the authors of CNI claim for various advantages over JNI:[9]

CNI depends on Java classes appearing as C++ classes. For example,[10] given a Java class,

public class Int
   public int i;
   public Int(int i) { this.i = i; }
   public static Int zero = new Int(0);

one can use the class thus:

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

See also[edit]


External links[edit]