JRE and JDK

Java SE Runtime Environment (JRE)

The JRE provides the libraries, Java virtual machine, and other
components necessary for you to run applets and
applications written in the Java programming language. This runtime
environment can be redistributed with applications to make them
free-standing.

Java SE Development Kit (JDK)

The JDK includes the JRE plus command-line development tools
such as compilers and debuggers that are necessary or useful for
developing applets and applications.

Java Programming Language

The Java Programming Language is a general-purpose, concurrent,
strongly typed, class-based object-oriented language. It is
normally compiled to the bytecode instruction set and binary format
defined in the Java Virtual Machine Specification. For more
information see Language
Features.

Java Virtual Machines

The Java virtual machine is an abstract computing machine that
has an instruction set and manipulates memory at run time. The Java
virtual machine is ported to different platforms to provide
hardware- and operating system-independence.

Java HotSpot Client VM

The client VM is an implementation for platforms typically used
for client applications. The client VM is tuned for reducing
start-up time and memory footprint. It can be invoked by using the
-client command-line option when launching an
application.

Java HotSpot Server VM

The server VM is an implementation designed for maximum program
execution speed, trading off launch time and memory. It can be
invoked by using the -server command-line option when
launching an application.

Base Libraries

Classes and interfaces that provide basic features and
fundamental functionality for the Java platform.

Lang and Util Packages

Provides the fundamental Object and Class
classes, wrapper classes for primitive types, a basic math class,
and more. See the Lang and Util
documentation for more information.

Math

Math functionality includes floating point libraries and
arbitrary-precision math. For more information, see the Math documentation.

Monitoring and Management

Comprehensive monitoring and management support for Java
platform including Monitoring and Management API for Java virtual
machine, Monitoring and Management API for the Logging Facility,
jconsole and other monitoring utilities, out-of-the-box monitoring
and management, Java Management Extensions (JMX), and Oracle's
Platform Extension. See the Monitoring and Management documentation
for more information.

Package Version Identification

The package versioning feature enables package-level version
control so that applications and applets can identify at runtime
the version of a specific Java Runtime Environment, VM, and class
package. For more information, see the Package Version Identification
documentation.

Reference Objects

Reference objects support a limited degree of interaction with
the garbage collector. A program may use a reference object to
maintain a reference to some other object in such a way that the
latter object may still be reclaimed by the collector. A program
may also arrange to be notified some time after the collector has
determined that the reachability of a given object has changed.
Reference objects are therefore useful for building simple caches
as well as caches that are flushed when memory runs low, for
implementing mappings that do not prevent their keys (or values)
from being reclaimed, and for scheduling pre-mortem cleanup actions
in a more flexible way than is possible with the Java finalization
mechanism. For more information, see the Reference Objects
documentation.

Reflection

Reflection enables Java code to discover information about the
fields, methods and constructors of loaded classes, and to use
reflected fields, methods, and constructors to operate on their
underlying counterparts on objects, within security restrictions.
The API accommodates applications that need access to either the
public members of a target object (based on its runtime class) or
the members declared by a given class. Programs can suppress
default reflective access control. For more information, see the
Reflection documentation.

Collections Framework

A collection is an object that represents a group of
objects. The collections framework is a unified architecture for
representing collections, allowing them to be manipulated
independently of the details of their representation. It reduces
programming effort while increasing performance. It allows for
interoperability among unrelated APIs, reduces effort in designing
and learning new APIs, and fosters software reuse. For more
information, see the Collections
Framework documentation.

Concurrency Utilities

The Concurrency Utilities packages provide a powerful,
extensible framework of high-performance threading utilities such
as thread pools and blocking queues. This package frees the
programmer from the need to craft these utilities by hand, in much
the same manner the Collections Framework did for data structures.
Additionally, these packages provide low-level primitives for
advanced concurrent programming. For more information, See the
Concurrency Utilities
documentation.

Java Archive (JAR) Files

JAR (Java Archive) is a platform-independent file format that
aggregates many files into one. Multiple Java applets and their
requisite components (.class files, images and sounds) can be
bundled in a JAR file and subsequently downloaded to a browser in a
single HTTP transaction, greatly improving the download speed. The
JAR format also supports compression, which reduces the file size,
further improving the download time. In addition, the applet author
can digitally sign individual entries in a JAR file to authenticate
their origin. It is fully extensible. For more information, see the
Java Archive documentation.

Logging

The Logging APIs facilitate software servicing and maintenance
at customer sites by producing log reports suitable for analysis by
end users, system administrators, field service engineers, and
software development teams. The Logging APIs capture information
such as security failures, configuration errors, performance
bottlenecks, and/or bugs in the application or platform. For more
information, see the Logging
documentation.

Preferences

The Preferences API provides a way for applications to store and
retrieve user and system preference and configuration data. The
data is stored persistently in an implementation-dependent backing
store. There are two separate trees of preference nodes, one for
user preferences and one for system preferences. For more
information, see the Preferences
API documentation,

Other Base Packages

I/O

The java.io and java.nio packages
provide a rich set of APIs for managing an application's I/O. The
functionality includes file and device I/O, object serialization,
buffer management, and character-set support. Additionally, the
APIs support features for scalable servers including multiplexed,
non-blocking I/O, memory mapping and locks for files. For more
information, see the I/O
documentation.

Object Serialization

Object Serialization extends the core Java Input/Output classes
with support for objects. Object Serialization supports the
encoding of objects, and the objects reachable from them, into a
stream of bytes; and it supports the complementary reconstruction
of the object graph from the stream. Serialization is used for
lightweight persistence and for communication via sockets or Remote
Method Invocation (RMI). See the Object Serialization documentation
for more information.

Networking

Provides classes for networking functionality, including
addressing, classes for using URLs and URIs, socket classes for
connecting to servers, networking security functionality, and more.
See the Networking documentation for
more information.

Security

APIs for security-related functionality such as configurable
access control, digital signing, authentication and authorization,
cryptography, secure Internet communication, and more. See the
Security documentation for more
information.

Internationalization

APIs that enable the development of internationalized
applications. Internationalization is the process of designing an
application so that it can be adapted to various languages and
regions without engineering changes. See the Internationalization documentation for more
information.

JavaBeans™ Component API

Contains classes related to developing beans -- components based
on the JavaBeans™ architecture that can be pieced together as
part of developing an application. See the JavaBeans documentation for more
information.

Java Management Extensions (JMX)

The Java Management Extensions (JMX) API is a standard API for
management and monitoring of resources such as applications,
devices, services, and the Java virtual machine. Typical uses
include consulting and changing application configuration,
accumulating statistics about application behavior, and notifying
of state changes and erroneous conditions. The JMX API includes
remote access, so a remote management program can interact with a
running application for these purposes. See the Java Management Extensions documentation for
more information.

XML (JAXP)

The Java platform provides a rich set of APIs for processing XML
documents and data. See the Java SE XML
documentation for more information.

Java Native Interface (JNI)

Java Native Interface (JNI) is a standard programming interface
for writing Java native methods and embedding the Java virtual
machine into native applications. The primary goal is binary
compatibility of native method libraries across all Java virtual
machine implementations on a given platform. See the Java Native Interface documentation for more
information.

Extension Mechanism

Optional packages are packages of Java classes (and any
associated native code) that application developers can use to
extend the functionality of the core platform. The extension
mechanism allows the Java virtual machine (VM) to use the classes
of the optional extension in much the same way as the VM uses
classes in the Java Platform. The extension mechanism also provides
a way for needed optional packages to be retrieved from specified
URLs when they are not already installed in the JDK or Runtime
Environment. See the Java Extension
Mechanism documentation for more information.

Endorsed Standards Override Mechanism

An endorsed standard is a Java API defined through a standards
process other than the Java Community ProcessSM (JCP). Because
endorsed standards are defined outside the JCP, it is anticipated
that such standards may be revised between releases of the Java
Platform. In order to take advantage of new revisions to endorsed
standards, developers and software vendors may use the Endorsed
Standards Override Mechanism to provide newer versions of an
endorsed standard than those included in the Java Platform as
released by Oracle. See the Endorsed Standards Override Mechanism
documentation for more information.

Integration Libraries

Java Database Connectivity (JDBC) API

The JDBC™ API provides universal data access from the Java
programming language. Using the JDBC 3.0 API, you developers can
write applications that can access virtually any data source, from
relational databases to spreadsheets and flat files. JDBC
technology also provides a common base on which tools and alternate
interfaces can be built. For more information, see the JDBC documentation.

Remote Method Invocation (RMI)

Remote Method Invocation (RMI) enables the development of
distributed applications by providing for remote communication
between programs written in the Java programming language. RMI
enables an object running in one Java Virtual Machine to invoke
methods on an object running in another Java VM, which may be on a
different host. For more information, see the Java SE RMI documentation.

RMI-IIOP

Java Remote Method Invocation over Internet Inter-ORB Protocol
technology The RMI Programming Model enables the programming of
CORBA servers and applications via the RMI API. You can choose to
work completely within the Java programming language using the Java
Remote Method Protocol (JRMP) as the transport, or work with other
CORBA-compliant programming languages using the Internet InterORB
Protocol (IIOP). You use the rmic compiler to generate the code
necessary for connecting your applications via the Internet
InterORB Protocol (IIOP) to others written in any CORBA-compliant
language. To work with CORBA applications in other languages, IDL
can be generated from Java programming language interfaces using
the rmic compiler with the -idl option. To generate IIOP stubs and
tie classes, use the rmic compiler with the -iiop option. For more
information, see the RMI-IIOP
documentation.

Scripting for the Java Platform

Java SE 6 includes the JSR 223: Scripting for the
Java™ Platform API. This is a framework by which Java
Applications can "host" script engines. Oracle's implementation of
Java SE 6 includes an example script engine based on Mozilla Rhino:java_script for
Java. The scripting framework supports third-party script
engines through jar "service discovery" mechanism. It is possible
to "drop" any JSR-223 compliant script engine in the CLASSPATH and
access the same from your Java applications For more information,
see the Scripting
documentation.

Java Naming and Directory Interface™ (JNDI) API

The Java Naming and Directory Interface™ (JNDI) provides
naming and directory functionality to applications written in the
Java programming language. It is designed to be independent of any
specific naming or directory service implementation. Thus a variety
of services--new, emerging, and already deployed ones--can be
accessed in a common way. The JNDI architecture consists of a API
and an SPI (Service Provider Interface). Java applications use this
API to access a variety of naming and directory services. The SPI
enables a variety of naming and directory services to be plugged in
transparently, allowing the Java application using the JNDI API to
access their services. For more information, see JNDI documentation.

User Interface Libraries

Input Method Framework

The input method framework enables the collaboration between
text editing components and input methods in entering text. Input
methods are software components that let the user enter text in
ways other than simple typing on a keyboard. They are commonly used
to enter Japanese, Chinese, or Korean -- languages using thousands
of different characters - on keyboards with far fewer keys.
However, the framework also supports input methods for other
languages and the use of entirely different input mechanisms, such
as handwriting or speech recognition. For more information, see the
Input Method Framework
documentation.

Accessibility

With the Java Accessibility API, developers can easily create
Java applications that are accessible to disabled persons.
Accessible Java applications are compatible with assistive
technologies such as screen readers, speech recognition systems,
and refreshable braille displays. For more information, see the
Accessibility documentation.

Print Service

The Java™ Print Service API, allows printing on all Java
platforms including those requiring a small footprint, such as a
Java ME profile. For more information, see Java Print Service documentation.

Sound

The Java platform includes a powerful API for capturing,
processing, and playing back audio and MIDI (Musical Instrument
Digital Interface) data. This API is supported by an efficient
sound engine which guarantees high-quality audio mixing and MIDI
synthesis capabilities for the platform. For more information, see
Java Sound documentation.

Drag and Drop Data Transfer

Drag and Drop enables data transfer both across Java programming
language and native applications, between Java programming language
applications, and within a single Java programming language
application. For more information, see Drag and Drop Transfer.

Image I/O

The Java Image I/O API provides a pluggable architecture for
working with images stored in files and accessed across the
network. The API provides a framework for the addition of
format-specific plugins. Plug-ins for several common formats are
included with Java Image I/O, but third parties can use this API to
create their own plugins to handle special formats. For more
information, see Image I/O.

Java 2D™ Graphics and Imaging

The Java 2D™ API is a set of classes for advanced 2D
graphics and imaging. It encompasses line art, text, and images in
a single comprehensive model. The API provides extensive support
for image compositing and alpha channel images, a set of classes to
provide accurate color space definition and conversion, and a rich
set of display-oriented imaging operators. For more information,
see the Java 2D documentation.

AWT

The Java™ platform's Abstract Windowing Toolkit (AWT)
provides APIs for constructing user interface components such as
menus, buttons, text fields, dialog boxes, checkboxes, and for
handling user input through those components. In addition, AWT
allows for rendering of simple shapes such as ovals and polygons
and enables developers to control the user-interface layout and
fonts used by their applications. For more information, see the
AWT documentation.

Swing

The Swing APIs also provide graphical component (GUI) for use in
user interfaces. The Swing APIs are written in the Java programming
language without any reliance on code that is specific to the GUI
facilities provided by underlying operating system. This allows the
Swing GUI components to have a "pluggable" look-and-feel that can
be switched while an application is running. For more information,
see the Java SE Swing
documentation.

JavaFX

Java SE 7 Update 2 and later includes the JavaFX SDK. The JavaFX platform is the evolution of the Java client platform designed to enable application developers to easily create and deploy rich internet applications (RIAs) that behave consistently across multiple platforms. See JavaFX Release Documents for more information.

Tool Specifications

Debugger Architecture

VM Tool Interface

The Java Virtual Machine Tool Interface (JVM TI) is a
specification for inspecting the state and controlling the
execution of applications running in the JVM. The Java Virtual
Machine Profiler Interface (JVMPI) has been deprecated. For more
information, see the Java Virtual
Machine Tool Interface (JVM TI) documentation.

Javadoc Tool

Javadoc is a tool that parses the declarations and documentation
comments source files to produce a set of HTML pages describing the
program elements. The Doclet API provides a mechanism for clients
to inspect the source-level structure of programs and libraries,
including Javadoc comments embedded in the source. This API can be
used by doclets to generate documentation. For more information,
see the Javadoc documentation.

Annotation Processing

The apt tool is a command-line utility for annotation
processing. It includes a set of reflective APIs and supporting
infrastructure to process program annotations. These reflective
APIs provide a build-time, source-based, read-only view of program
structure. They are designed to cleanly model the Java programming
language's type system after the addition of generics. For more
information, see the apt
documentation.

Dynamic Attach

The package com.sun.tools.attach contains an Oracle
extension to the Java Platform that allows an application to attach
to a running Java virtual machine. Once the attach has been made, a
tool agent can be started in the target virtual machine. For more
information, see the attach
documentation.

JConsole API

The package com.sun.tools.jconsole contains an Oracle
extension to the Java Platform that provides a programmatic
interface to access JConsole. For more information, see Using JConsole.

Platforms

Oracle provides implementations of the JDK and Java Runtime
Environment for Microsoft Windows, Linux, and the Solaris operating
systems. See
System Configurations for information about which versions of
these platforms are supported.

Other companies may provide implementations of the Java platform
for other operating systems such as Macintosh, AIX, etc.