[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/Snailclimb/JavaGuide/main/docs/java/new-features/java16.md [Back]  [Original]

---
title: Java 16 
description:  JDK 16  JEP 
category: Java
tag:
  - Java
head:
  - - meta
    - name: keywords
      content: Java 16,JDK16,, API,JEP,
---

Java 16  2021  3  16 LTS

JDK 16  17 

- [JEP 338: Vector API (Incubator) API](https://openjdk.java.net/jeps/338)
- [JEP 376: ZGC: Concurrent Thread-Stack ProcessingZGC ](https://openjdk.java.net/jeps/376)
- [JEP 387: Elastic Metaspace](https://openjdk.java.net/jeps/387)
- [JEP 390: Warnings for Value-Based Classes](https://openjdk.java.net/jeps/390)
- [JEP 394: Pattern Matching for instanceofinstanceof ](https://openjdk.java.net/jeps/394)
- [JEP 395: Recordsrecord ](https://openjdk.java.net/jeps/395)
- [JEP 396: Strongly Encapsulate JDK Internals by Default JDK ](https://openjdk.java.net/jeps/396)
- [JEP 397: Sealed Classes (Second Preview)](https://openjdk.java.net/jeps/397)

 JDK 8  JDK 25 

![ JDK 8  JDK 25 ](https://oss.javaguide.cn/github/javaguide/java/new-features/jdk8~jdk24.png)

[OpenJDK Java 16 ](https://openjdk.java.net/projects/jdk/16/)

## JEP 338: Vector API API

Vector API  [JEP 338](https://openjdk.java.net/jeps/338) [ API](http://openjdk.java.net/jeps/11) Java 16  [JEP 414](https://openjdk.java.net/jeps/414)  Java 17  [JEP 417](https://openjdk.java.net/jeps/417)  Java 18  [JEP 426](https://openjdk.java.net/jeps/426)  Java 19 

 API  API  CPU SIMD CPU  HotSpot  API  Java 

 [Java 18 ](./java18.md)  API

## JEP 347: Enable C++ 14 Language Features C++ 14 

Java 16  JDK  C++  C++ 14  HotSpot 

 Java 15 JDK  C++  C++98/03 

## JEP 376: ZGC: Concurrent Thread-Stack ProcessingZGC 

Java16  ZGC  GC  ZGC 

## JEP 387: Elastic Metaspace

 Metaspace Metaspace  HotSpot metaspace



## JEP 390: Warnings for Value-Based Classes

> [ |  Java16 ](https://xie.infoq.cn/article/8304c894c4e38318d38ceb116)

 Java9 Java  `@Deprecated`  `since`  `forRemoval`  2 since  `@Deprecated`  API  `forRemoval`  API  @Deprecated  `forRemoval=true`  API  API Java9  @Deprecated  API

`java.lang.Integer``java.lang.Double` `@Deprecated(since="9", forRemoval = true)`  `new Integer(10)`  `Integer a = 10`  `Integer.valueOf()`  `'Integer(int)' is deprecated and marked for removal`  `java.util.Optional`  `java.time.LocalDateTime` value-based class Project Valhalla 

 `synchronized` JDK 16 HotSpot 

```java
private Integer count = 0;

public void inc() {
    synchronized (count) {
        count++;
    }
}
```

`Integer` `count++`  `Integer`  `AtomicInteger`

## JEP 392: Packaging Tool

 Java 14 JEP 343  `jpackage` Java 15  Java 16 

 Java  Windows  msi  exemacOS  pkg  dmg Linux  deb  rpm ToolProvider API  jpackage  jdk.incubator.jpackage  jdk.jpackage

 [Playing with Java 16 jpackage](https://www.youtube.com/watch?v=KahYIVzRIkQ)

## JEP 393: Foreign Memory Access API API

 API  Java  Java 

Java 14[JEP 370](https://openjdk.org/jeps/370) APIJava 15 [JEP 383](https://openjdk.org/jeps/383) Java 16 

 API 

-  API 
- API  JVM 
- 
-  API  `sun.misc.Unsafe` 

## JEP 394: Pattern Matching for instanceofinstanceof 

| JDK    |           | JEP                                     |                                  |
| ---------- | ----------------- | --------------------------------------- | ---------------------------------------- |
| Java SE 14 | preview           | [JEP 305](https://openjdk.org/jeps/305) |  instanceof            |
| Java SE 15 | Second Preview    | [JEP 375](https://openjdk.org/jeps/375) |  |
| Java SE 16 | Permanent Release | [JEP 394](https://openjdk.org/jeps/394) |  final               |

 Java 16  `instanceof` 

```java
// Old code
if (o instanceof String) {
    String s = (String)o;
    ... use s ...
}

// New code
if (o instanceof String s) {
    ... use s ...
}
```

## JEP 395: Recordsrecord 



| JDK    |           | JEP                                          |                                                                   |
| ---------- | ----------------- | -------------------------------------------- | ------------------------------------------------------------------------- |
| Java SE 14 | Preview           | [JEP 359](https://openjdk.java.net/jeps/359) |  `record` `record`  |
| Java SE 15 | Second Preview    | [JEP 384](https://openjdk.org/jeps/384)      |  `record`                                     |
| Java SE 16 | Permanent Release | [JEP 395](https://openjdk.org/jeps/395)      |                                     |

 Java SE 16 

```java
public class Outer {
  class Inner {
    static int age;
  }
}
```

>  JDK 16 IDE  age The field age cannot be declared static in a non-static inner type, unless initialized with a constant expression

## JEP 396: Strongly Encapsulate JDK Internals by Default JDK 

 JDK  API `sun.misc.Unsafe` JDK  API  API  Java  JDK 9 illegal-access  JDK 15  warning JDK 16  denyadd-opens 

## JEP 397: Sealed Classes

 [JEP 360](https://openjdk.java.net/jeps/360)  Java 15  JDK 16   [JEP 397](https://openjdk.java.net/jeps/397) 

 [Java 14 & 15 ](./java14-15.md) 

## 

- **JEP 380:Unix-Domain **Unix-domain  Unix  Windows 10  Windows Server 2019  java.nio.channels  API  Unix-domainAF_UNIX Unix-domain Unix-domain IPC TCP/IP Internet IPUnix-domain  TCP/IP 
- **JEP 389: API**  API  Java  API Java 1.1  Java JNIJava  JNI 
- **JEP 357: Mercurial  Git**OpenJDK  Mercurial  Git
- **JEP 369: GitHub** JEP 357  Mercurial  Git  Git  GitHub  OpenJDK  Git  JDK 11  JDK 
- **JEP 386: Alpine Linux**Alpine Linux  Linux  8MB  130MB  JDK  Apline Linux Apline Linux  musl lib  Linux  x64  AArch64  musl lib  Linux 
- **JEP 388:Windows/AArch64 ** JEP  JDK JEP 386  JDK  Alpine Linux  musl  x64  C JEP 388  JDK  Windows AArch64ARM64

## 

- [Java Language Changes](https://docs.oracle.com/en/java/javase/16/language/java-language-changes.html)
- [Consolidated JDK 16 Release Notes](https://www.oracle.com/java/technologies/javase/16all-relnotes.html)
- [Java 16 ](https://www.infoq.cn/article/IAkwhx7i9V7G8zLVEd4L)
- [ |  Java16 ](https://xie.infoq.cn/article/8304c894c4e38318d38ceb116)



Web Proxy Viewer  |  New URL  |  Original Page