Java
A statically typed, object-oriented language that compiles to portable bytecode for the Java Virtual Machine, with a new release every six months.
- What it is
- Programming languages (run on a virtual machine),Object-oriented programming
- Type
- Open source
- Made by
- Oracle / OpenJDK
- License
- GPL 2.0 with the Classpath Exception (OpenJDK)
- Facts checked
- 8 October 2026
What it is
The javac compiler turns Java source into class files: bytecode and a binary format defined by the Java Virtual Machine Specification, not machine code for one CPU. Any JVM can load the same class files, which is where the old “write once, run anywhere” promise comes from. Memory is managed for you: objects are created with new, there is no pointer arithmetic, and a garbage collector frees what is no longer reachable.
OpenJDK, the open-source reference implementation, ships a feature release every six months, in March and September, on a fixed schedule. Vendors pick some releases for long-term support: Oracle’s LTS releases are 8, 11, 17, 21 and 25, and it plans a new one every two years (Java 29 in September 2027). JDK 27 shipped on September 15, 2026.
Since JDK 21 (September 2023) Java has virtual threads (JEP 444): lightweight threads managed by the JDK rather than the operating system. Thousands or millions of them can exist at once, so plain blocking code written one thread per request scales like asynchronous code, without callbacks.
Why teams pick it
- Compiled class files run unchanged on any JVM, on any operating system and CPU the JVM supports
- Garbage collection and no pointer arithmetic rule out whole classes of memory bugs common in C and C++
- A predictable cadence: a feature release every March and September, plus long-term support releases for teams that upgrade less often
- Virtual threads let simple thread-per-request servers scale to many concurrent requests without rewriting them as async code
Watch out for
- A non-LTS release gets only two updates before the next one ships, so you either upgrade every six months or stay on an LTS
- Virtual threads add scale, not speed: CPU-bound work runs no faster, and blocking while pinned to a carrier thread can still limit throughput
- Generic type arguments are erased during compilation, so code can’t ask at runtime whether a
ListholdsStrings orIntegers
Alternatives
What all run on a virtual machine have in common →How it fits with other technologies
Ten thousand blocking tasks, each on its own virtual thread · java
import java.time.Duration;
import java.util.concurrent.Executors;
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
long start = System.nanoTime();
// One virtual thread per task (Java 21+): 10,000 threads are cheap.
try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
IntStream.range(0, 10_000).forEach(i ->
executor.submit(() -> {
Thread.sleep(Duration.ofSeconds(1)); // blocks only this virtual thread
return i;
}));
} // close() waits for every task to finish
long ms = (System.nanoTime() - start) / 1_000_000;
System.out.println("done in " + ms + " ms"); // about a second, not 10,000 seconds
}
}See it in a real stack
No architecture uses Java yet. Drop it into the playground and wire it up yourself.Open playground →Where it came from1991–2023
In June 1991 James Gosling, Mike Sheridan and Patrick Naughton at Sun Microsystems started a research project to build software for network devices and embedded systems. The goal was a small, reliable, portable platform. They began in C++, but its problems grew until the team decided a new language was the better answer. It was first called Oak, after a tree outside Gosling’s office, and was renamed Java.
Sun released Java in May 1995, and Java 1.0 followed in 1996. Its pitch fit the early web: programs compiled once to bytecode would run on any machine with a Java runtime, at a time when software had to be built separately for Windows, Macintosh and many flavors of Unix. Sun released the JVM and class libraries as free software under the GPL from November 2006 to May 2007, and Oracle took over stewardship when it bought Sun in 2009–10.
Big releases used to arrive years apart, held up by their largest feature. In 2017 Mark Reinhold, chief architect of the Java platform, proposed shipping whatever is ready every six months instead. That model started with JDK 10 in March 2018.
Why it’s built this way
- Look like C++, minus its complexity
- Keeping C++’s syntax and object-oriented feel let C and C++ programmers move over quickly, while dropping features such as pointer arithmetic and manual memory management removed common sources of bugs.
- Compile to bytecode for a virtual machine
- Software had to run on a mix of hardware and operating systems across a network. Machine-independent bytecode, run by an interpreter and runtime on each platform, meant one build could ship everywhere.
- Automatic garbage collection
- A collector running in the background frees memory the program no longer uses, which the designers saw as removing entire classes of errors that troubled C and C++ programmers.
- Time-based releases every six months
- Feature-driven releases slipped while waiting for the biggest feature. A fixed train ships smaller releases on time, and long-term support releases serve teams that can’t upgrade that often.
Timeline
- 1991
Gosling, Sheridan and Naughton start the project at Sun as Oak
- 1995
Sun releases Java in May
- 2006
Sun starts releasing the JVM and libraries under the GPL (finished in May 2007)
- 2010
Oracle completes its acquisition of Sun and becomes Java’s steward
- 2018
JDK 10 is the first release on the six-month train
- 2023
JDK 21 makes virtual threads final
- Gosling and McGilton: The Java Language Environment, a white paper (May 1996), chapter 1
- Gosling and McGilton: The Java Language Environment, chapter 4: Architecture neutral, portable and robust
- Mark Reinhold: Moving Java forward faster (Sep 2017)
- OpenJDK: JDK project (release dates since JDK 10)
- JEP 444: Virtual threads (delivered in JDK 21)
- Wikipedia: Java (programming language), history section
Sources9 · facts checked 8 October 2026
- Java Language Specification, Java SE 25, chapter 1 (compiled to the bytecode defined by the JVM spec)
- Java Language Specification, Java SE 25, chapter 4 (type erasure, reifiable types)
- Gosling and McGilton: The Java Language Environment (garbage collection, no pointers)
- OpenJDK: JDK project (six-month releases, GA dates up to JDK 27)
- OpenJDK: JDK 25 (long-term support release, GA 2025-09-16)
- Oracle Java SE support roadmap (LTS releases, next LTS Java 29 in September 2027)
- Mark Reinhold: Moving Java forward faster (two updates per feature release)
- JEP 444: Virtual threads (thread-per-request, not faster threads, pinning)
- OpenJDK: GPLv2 with the Classpath Exception