Free Java Resources and Tools
Java Decompilers, Virtual Machines, Debuggers, Lint, etc
Free Java Tools, Decompilers, Disassemblers, Virtual Machines, Debuggers, Resources
This page lists free Java resources and tools: Java disassemblers, decompilers, Java IDEs, Java Virtual Machines (JVM), Java debuggers, and the like. Other Java pages on this site that you may be interested in include:
Looking for a Java book? One frequently recommended book on Java is Java in a Nutshell. I use the first edition of this book myself to learn Java and have found it most usable. The later editions include support for newer versions of Java, as well as extended the explanations to make it easier for non-C programmers to understand the book (the first two editions targeted C programmers).
Due to the large size of the later versions of the language, the Java Foundation Classes (which you will need if you are writing Java applets) are covered separately in the companion book, Java Foundation Classes in a Nutshell. If you learn best through studying examples, the author also has a book Java Examples in a Nutshell: A Tutorial Companion to Java in a Nutshell. You'll probably get your program up fastest if you model it on an existing working example.
Free Java Decompilers and Java Class Browsers
jclassinfo is a utility written in C (with the source code provided) that reads Java class files and provides you information about the class, its dependencies and so on. It supports both Windows and Linux.
- Sun Java Development Kit and Runtime Environment
Sun's Java Development Kit (JDK) and Runtime Environment (JRE) are available free of charge from their site. It's available for Windows, Linux, Solaris SPARC, Solaris x86, Linux x64 and Windows x64.
JamVM is a Java Virtual Machine that conforms to the JVM specification version 2 (blue book). It is designed to supports the full specification, including object finalisation, the Java Native Interface (JNI) and the Reflection API. Supported platforms include LinuxPPC, Mac OS X/Darwin, Linux for i386 and Linux for ARM processors.
- Kaffe OpenVM
Kaffe is a Java virtual machine (JVM), developed independently of Sun, that supports PersonalJava 1.1 bytecode and comes with its own standard class libraries, beans, Abstract Window Toolkit (AWT), and native libraries. There is even a just-in-time (JIT) compiler. The entire works comes with source code (under LGPL). If you need some other license for the code, the site says that you can actually pay them for a license with less encumberances.
This Java virtual machine, from the Hungry Programmers, comes with source code (under LGPL). Like Kaffe, it was written independently of Sun. It looks like it supports a lot of Java 1.1 and 1.2. However, it doesn't seem to have been updated since 1998.
Free Java Debuggers and Lint
- PMD Java Source Code Static Analysis Tool
PMD is a Java source code static analysis tool. It checks your Java source for various potential problems (just as the lint utility in the C world does with C) and informs you of any parts of your code that can cause problems. PMD is open source, and is licensed under a BSD-style licence.
- JPF - Java PathFinder
Java PathFinder (JPF) is verifies Java bytecode programs. It is "a Java Virtual Machine (JVM) that is used as an explicit state software model checker, systematically exploring all potential execution paths of a program to find violations of properties like deadlocks or unhandled exceptions" (quoted from the website). It may be useful in locating hard-to-test concurrency defects in multithreaded programs.
- ODB - Omniscient Debugger
ODB, or the Omniscient Debugger, is Java debugger written in Java that collects information about your program at certain points of interest in a program run. The programmer can then explore the history of the run. The ODB is released under the GNU GPL.
- Jlint: Java Program Checker
Like the lint utility which checks C programs, jlint is a program checker that scrutinizes your Java source code for suspicious constructs that might indicate a program bug. The program is released under the GNU GPL. Binaries are available for Windows. For other platforms, you can compile the code yourself using a C++ compiler like GNU gcc (see the Free C/C++ Compilers page to get one).
Free Java Compiler Construction Tools
Note: more compiler construction tools can be found on the Free Compiler Construction Tools: Lexical Analyzers, Parser Generators, Back-End Generators, Optimizer Generators page.
This is a version of Berkeley yacc modified so that it can generate Java source code. You simply supply a "-J" option on the command line and it'll produce the Java code instead of the usual C output. You can either get the free source code and compile it yourself, or download any of the precompiled binaries for Solaris, SGI/IRIX, Windows 95/NT, and Linux. Like the byacc original, your output is free of any restrictions, and you can freely use it for any purpose you wish.
ANTLR generates a recursive descent parser in C, C++ or Java from a predicated-LL(k>1) grammar. It is able to build ASTs automatically.
This is an object-oriented framework that generates DFA based lexers, LALR(1) parsers, strictly typed syntax trees, and tree walker classes from an extended BNF grammar (in other words, it's a compiler generator). The program was written in Java itself and runs on any Java 1.1 (or later) system.
- Java Compiler Compiler (JavaCC) - Java Parser Generator
This Java parser generator is written in Java and produces pure Java code. It even comes with grammars for Java 1.0.2, 1.1 as well as HTML. It generates recursive descent parsers (top-down) and allows you to specify both lexical and grammar specifications in your input grammar. In terms of syntactic and semantic lookahead, it generates an LL(1) parser with specific portions LL(k) to resolve things like shift-shift conflicts. The input grammar is in extended BNF notation. It comes with JJTree, a tree building preprocessor; a documentation generator; support for Unicode (and hence internationalization), and many examples. There are numerous other features, including debugging capabilities, error reporting, etc.
How to Link to This Page
It will appear on your page as: