GNU Compiler for Java

GNU Compiler for Java
Gcj2.png
Developer(s) The GNU Project
Operating system Unix-like
Type Compiler
License GNU GPL
Website http://gcc.gnu.org/java

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]

History

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]

Performance

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)

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

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

References

External links