GCJ (GNU Compiler for Java) était le compilateur Java du projet GNU, sous licence libre. Il a été un des composants de GCC de la version 3 jusqu'à la version 6, avant d'en être retiré à partir de la version 7[2].
Contrairement au compilateur du SDK Java de Sun Microsystems produisant exclusivement du bytecode Java, gcj opte pour une approche traditionnelle en produisant du code natif pour l'architecture matérielle[3]. De plus GCJ est également capable de fonctionner comme un compilateur Java classique en produisant du bytecode, et permet également de transformer du bytecode vers du code natif. La plupart des bibliothèques Java utilisées par GCJ viennent du projet GNU Classpath et forment la librairie libgcj.
L'utilisation du code natif permet d'augmenter sensiblement la rapidité d'exécution, au détriment de la portabilité.
gcj étant intégré à la suite de compilateur GCC permet d'utiliser tous les outils de celle-ci, notamment le débogueur gdb.
D'importants efforts de développement ont été effectuées durant la première moitié des années 2000 afin de constituer une plateforme java libre[4], et gcj commençait à être intégré dans les distributions linux[5]. Mais à la suite du passage sous licence libre de java en 2006[6], une grande partie de la communauté open source java s'est tourné vers OpenJDK diminuant l'attrait de ce projet. Le retrait de gcj, évoqué en 2013[7], est effectif depuis la version 7 de GCC.