Java, a programming language originally developed by James Gosling, was developed at Sun Microsystems and released in 1995. Much of its syntax is derived from C and C++ but with a simpler object model and fewer low-level facilities. The applications are normally compiled to bytecode that can run on any Java Virtual Machine regardless of computer architecture. Java, designed to have as few implementation dependencies as possible, is a concurrent, class-based, object oriented language. It is supposed to let developers “write once, run anywhere. It is widely used from application software to web applications and is one of the most popular programming languages in use.

Sun developed the original and reference implementation Java compilers, virtual machines, and class libraries. In May 2007 Sun re-licensed most of its Java technologies under the GNU General Public License. In June 1991 James Gosling, Mike Sheridan, and Patrick Naughton started the Java language project. Its original intent was for interactive television but ended up being too advanced. The original name for the language was Oak after an oak tree that was outside Gosling’s office, and then it was Green, and finally ended up being Java.

In 1995 the first public implementation of Java was launched. It promised decent security that was configurable along with network and file access restrictions. Shortly after its release major web browsers incorporated the ability to run Java applets within web pages and this spurred Java to popularity. Java 2 brought multiple configurations built for different types of platforms. J2EE targeted enterprise applications and stripped-down versions for mobile applications.

A short attempt to formalize Java was done in 1997 but Sun Microsystems withdrew from the process and thus remains a de facto standard controlled through the Java Community Process. Sun made many of its Java implementations free of charge in the beginning and made much of their money from the selling of licenses for specialized products such as the Java Enterprise System. Now all of Java’s core code is available under free software/open-source distribution terms. After Oracle Corporation acquired Sun Microsystems in 2009, Oracle described itself as the “steward of Java technology with a relentless commitment to fostering a community of participation and transparency.

Java has a lot of portability meaning computer programs written in the Java language must run similarly on any supported hardware/operating-system platform. This is done by compiling Java language code to an intermediate representation called Java bytecode, instead of directly to platform-specific machine code. Most end users use Java Runtime Environment on their machine for standalone Java applications.

Bytecode allows porting, however, the overhead of interpretation means these programs always run more slowly than programs compiled to native executables would. Just-in-Time compilers are used to compile bytecodes to machine code during runtime.

Part of Sun’s trademark license for usage of the Java brand is that all implementations be “compatible”. Sun Claimed that Microsoft’s implementation did not support RMI or JNI while also claiming they added platform specific features of their own. In 1997 Sun sued and in 2001 they won a settlement of $20 million as well as a court order enforcing the terms of the license from Sun. This has lead to Microsoft no longer shipping Java with Windows and Internet Explorer not supporting Java applets without a third party plug-in.

Part of Java’s strategy is Platform-independent java where more rigorous validation is required to certify an implementation. The GlassFish project is Sun’s attempt to create a fully functional, unified open source implementation of the Java EE technologies. Sun distributes Java Development Kit which comes with Java compiler, Javadoc, Jar, and debugger.

Java programs have a reputation for being slower and requiring more memory than those written in C. Just-in-time compilation in 1997 greatly speed up execution. Java was designed with a memory management system that spares the programmers from having to perform manual memory management. The Garbage collection system, which cleans up any parts of programming that are obsolete, usually runs when the program is idle. If there is no free memory the garbage collection program will automatically run which can cause a program to stall momentarily.

Java does not support C/C++ style pointer arithmetic. Like C++ and other object-oriented languages, variables of Java’s primitive data types are not objects. This was done consciously by designers for performance reasons. Due to this it was not considered to be a pure object-oriented programming language.