Java Platform
The
Java platform is the name for a computing environment, or
platform, from
Sun Microsystems which can run applications developed using the
Java programming language and set of development tools. In this case, the platform is not a specific hardware or operating system, but rather an execution engine called a
virtual machine, and a set of standard libraries which provide common functionality.
The platform is properly called the
Java Platform (formerly Java 2 Platform[
1]), and includes the
Java Platform, Standard Edition or
Java SE (formerly
J2SE), the
Java Platform, Enterprise Edition or
Java EE (formerly
J2EE), and the
Java Platform, Micro Edition or
Java ME (formerly
J2ME).
As of 2006, the current version of the Java Platform is alternatively specified as version 1.5 or version 5.0 or version 5 (all refer to the same version), however, version 5 is the preferred reference. A good overview of the myriad of technologies that makes up the current Java Platform can be found on the [docs/index.html JDK Documentation Page].
The Java Platform consists of a wide array of technologies, each of which provides a distinct portion of the overall development or
Java Runtime Environment. For example, end-users typically interface with the
Java Virtual Machine and the standard set of class libraries. In addition, there are numerous ways for Java applications to be deployed, including being embedded into a web page. Lastly, developers who are creating applications for the platform use a set of development tools called the
Java Development Kit.
The heart of the Java Platform is the concept of a common "virtual" processor that executes
Java bytecode programs. This bytecode is the same no matter what hardware or operating system the program is running under. The Java Platform provides an
interpreter called the
Java Virtual Machine, or JVM, which translates the Java bytecode into native processor instructions at run-time. This permits the same application to be run on any platform that has a virtual machine available.
Since JRE version 1.2, Sun's JVM implementation has also included a
just-in-time compiler. Instead of interpreting the bytecode one instruction at a time, this converts the bytecode for a program into equivalent native machine code as the program is loaded into the virtual machine, causing it to execute much faster at the cost of a small delay whenever new bytecode is loaded. This allows the JIT compiler to target a specific host platform and hardware, even potentially optimizing the output code in different ways based on observations of the program's behaviour.
This is not to say that one can truly compile Java code to its fullest extent (in order to reap the benefits of speedy native machine code). Yes, there are "compilers" available that will attempt this feat, but not all Java libraries have a machine code equivalent. For instance, the "reflect" library, which allows Java programmers to delve into instructions only available at runtime, is not well represented (if at all) by machine code.
Java was not the first virtual-machine-based platform, though it is by far the most successful and well-known. Previous uses for virtual machine technology primarily involved
emulators to aid development for not-yet-developed hardware or operating systems, but the JVM was designed to be implemented entirely in software, while making it easy to efficiently port an implementation to hardware of all kinds.
In most modern operating systems, a large body of reusable code is provided to simplify the programmer's job. This code is typically provided as a set of
dynamically loadable libraries that applications can call at runtime. Because the Java Platform is not dependent on any specific operating system, applications cannot rely on any of the existing libraries. Instead, the Java Platform provides a comprehensive set of standard class libraries, containing much of the same reusable functions commonly found in modern operating systems.
The Java class libraries serve three purposes within the Java Platform. Like other standard code libraries, they provide the programmer a well-known set of functions to perform common tasks, such as maintaining lists of items or performing complex string parsing. In addition, the class libraries provide an abstract interface to tasks that would normally depend heavily on the hardware and operating system. Tasks such as network access and file access are often heavily dependent on the native capabilities of the platform. The Java java.net and java.io libraries implement the required native code internally, then provide a standard interface for the Java applications to perform those tasks. Finally, some underlying platforms may not support all of the features a Java application expects. In these cases, the class libraries can either emulate those features using whatever is available, or provide a consistent way to check for the presence of a specific feature.
See the category Java programming language family.The word Java, by itself, usually refers to the Java programming language which was designed for use with the Java Platform. Programming languages are typically outside of the scope of the phrase "platform", although the Java programming language is listed as a core part of the Java platform. The language and runtime are therefore commonly considered a single unit.
Nevertheless, third parties have produced a number of compilers which target the JVM. Some of these are for existing languages, while others are for extensions to the Java language itself. These include:
*
AspectJ*
Generic Java (GJ), which was incorporated into official Java as of Java SE 5.0
*
Groovy*
Jython*
NetREXX*
Nice*
Pizza*
Scala*
JRubyThe success of Java and its
write once, run anywhere concept has also led to other similar efforts.
The most notable of these is the
Microsoft .NET platform, which copies many of the concepts and innovations of Java. In fact, it has an implementation of Java called
Visual J# (formerly known as
J++). It must be noted that this implementation is
not compatible with the Java specification, and the associated class library mostly dates to the old
JDK 1.1 version of the language; for these reasons, it is more a transitional language to switch from Java to the
Microsoft .NET platform, than a first class
Microsoft .NET language.