---
title: Java 25
description: JDK 25 GC /
category: Java
tag:
- Java
head:
- - meta
- name: keywords
content: Java 25,JDK25,LTS,,, Shenandoah,,
---
JDK 25 2025 9 16
JDK 25 Oracle JDK LTSOracle LTS JDK 8JDK 11JDK 17JDK 21 JDK 25
JDK 25 18
- [JEP 506: Scoped Values ()](https://openjdk.org/jeps/506)
- [JEP 512: Compact Source Files and Instance Main Methods ()](https://openjdk.org/jeps/512)
- [JEP 519: Compact Object Headers ()](https://openjdk.org/jeps/519)
- [JEP 521: Generational Shenandoah ( Shenandoah GC)](https://openjdk.org/jeps/521)
- [JEP 507: Primitive Types in Patterns, instanceof, and switch (, )](https://openjdk.org/jeps/507)
- [JEP 505: Structured Concurrency (, )](https://openjdk.org/jeps/505)
- [JEP 511: Module Import Declarations ()](https://openjdk.org/jeps/511)
- [JEP 513: Flexible Constructor Bodies ()](https://openjdk.org/jeps/513)
- [JEP 508: Vector API ( API, )](https://openjdk.org/jeps/508)
JDK 8 JDK 25

## JDK 25
### JEP 506:
Scoped Values `ThreadLocal`
```java
final static ScopedValue V = ScopedValue.newInstance();
// In some method
ScopedValue.where(V, )
.run(() -> { ... V.get() ... call methods ... });
// In a method called directly or indirectly from the lambda expression
... V.get() ...
```
### JEP 512:
[JEP 445](https://openjdk.org/jeps/445 "JEP 445")JDK 21 JDK 22JDK 23 JDK 24 JDK 25
Java `public class` `main`
```java
class HelloWorld {
void main() {
System.out.println("Hello, World!");
}
}
```
```java
void main() {
System.out.println("Hello, World!");
}
```
Java `public static void main(String[] args)` Java
### JEP 519:
[JEP 450](https://openjdk.org/jeps/450 "JEP 450")JDK 24JDK 25
64 HotSpot 96-128 12-16 64 8
JVM
- JDK 24
`$ java -XX:+UnlockExperimentalVMOptions -XX:+UseCompactObjectHeaders ...`
- JDK 25 `-XX:+UseCompactObjectHeaders`
### JEP 521: Shenandoah GC
Shenandoah GC JDK 12 JDK 15 `-XX:+UseShenandoahGC`
Shenandoah Red Hat
Shenandoah GCShenandoah CPU
Shenandoah GC
- JDK 24 `-XX:+UseShenandoahGC -XX:+UnlockExperimentalVMOptions -XX:ShenandoahGCMode=generational`
- JDK 25 `-XX:+UseShenandoahGC -XX:ShenandoahGCMode=generational`
### JEP 507:
[JEP 455](https://openjdk.org/jeps/455 "JEP 455")JDK 23
`switch` `instanceof` `int`, `double`, `boolean`
```java
static void test(Object obj) {
if (obj instanceof int i) {
System.out.println("int: " + i);
}
}
```
Java
### JEP 505:
JDK 19 API JDK 25 API `java.util.concurrent`
API `StructuredTaskScope`
`StructuredTaskScope`
```java
try (var scope = StructuredTaskScope.open()) {
// fork
Subtask subtask1 = scope.fork(task1);
Subtask subtask2 = scope.fork(task2);
//
scope.join();
//
... process results/exceptions ...
} // close
```
JDK
### JEP 511:
[JEP 476](https://openjdk.org/jeps/476 "JEP 476")JDK 23 [JEP 494](https://openjdk.org/jeps/494 "JEP 494")JDK 24JDK 25
Java Java
```java
// java.base ListMapStream
import module java.base;
public class Example {
public static void main(String[] args) {
String[] fruits = { "apple", "berry", "citrus" };
Map fruitMap = Stream.of(fruits)
.collect(Collectors.toMap(
s -> s.toUpperCase().substring(0, 1),
Function.identity()));
System.out.println(fruitMap);
}
}
```
### JEP 513:
[JEP 447](https://openjdk.org/jeps/447 "JEP 447")JDK 22 [JEP 482 ](https://openjdk.org/jeps/482 "JEP 482 ")JDK 23 [JEP 492](https://openjdk.org/jeps/492 "JEP 492")JDK 24JDK 25
Java `super(...)` `this(...)`
`super(..)` `this(..)`
Java
```java
class Person {
private final String name;
private int age;
public Person(String name, int age) {
if (age < 0) {
throw new IllegalArgumentException("Age cannot be negative.");
}
this.name = name; //
this.age = age;
// ...
}
}
class Employee extends Person {
private final int employeeId;
public Employee(String name, int age, int employeeId) {
this.employeeId = employeeId; //
super(name, age); //
// ...
}
}
```
### JEP 508: API
API CPU
API
```java
void scalarComputation(float[] a, float[] b, float[] c) {
for (int i = 0; i < a.length; i++) {
c[i] = (a[i] * a[i] + b[i] * b[i]) * -1.0f;
}
}
```
Vector API
```java
static final VectorSpecies SPECIES = FloatVector.SPECIES_PREFERRED;
void vectorComputation(float[] a, float[] b, float[] c) {
int i = 0;
int upperBound = SPECIES.loopBound(a.length);
for (; i < upperBound; i += SPECIES.length()) {
// FloatVector va, vb, vc;
var va = FloatVector.fromArray(SPECIES, a, i);
var vb = FloatVector.fromArray(SPECIES, b, i);
var vc = va.mul(va)
.add(vb.mul(vb))
.neg();
vc.intoArray(c, i);
}
for (; i < a.length; i++) {
c[i] = (a[i] * a[i] + b[i] * b[i]) * -1.0f;
}
}
```
Java C++ Java