---
title: Java 12 & 13
description: JDK 12/13 switch GC
category: Java
tag:
- Java
head:
- - meta
- name: keywords
content: Java 12,Java 13,,,,JEP
---
## Java 12
JDK 12 2019 3 19 LTS
- [JEP 189: Shenandoah: A Low-Pause-Time Garbage Collector (Experimental)](https://openjdk.org/jeps/189)
- [JEP 325: Switch Expressions (Preview) (switch , )](https://openjdk.org/jeps/325)
- [JEP 334: JVM Constants API (JVM API)](https://openjdk.org/jeps/334)
- [JEP 344: Abortable Mixed Collections for G1 (G1 )](https://openjdk.org/jeps/344)
- [JEP 346: Promptly Return Unused Committed Memory (G1 )](https://openjdk.org/jeps/346)
JDK 8 JDK 25

### JEP 189: Shenandoah
Redhat Pauseless GC 99.9% 10ms
Java11 ZGC JDK11 Shenandoah GC JDK8u Java8
### JEP 344 & JEP 346: G1
Java12 G1 :
- ****JEP344 JEP 344 G1 G1
- ****JEP346 G1 GC Java
### JEP 334: JVM Constants APIJVM API
API
API
- ****`ConstantDesc`
- ****`ClassDesc``MethodTypeDesc``MethodHandleDesc``DynamicConstantDesc`
- **** `invokedynamic`
API
1. ****
2. **** ASM Java
3. ****
4. ****
API Java 12
### JEP 325: Switch Expressionsswitch
`switch` `break` break
Java12 `switch` lambda break
```java
switch (day) {
case MONDAY, FRIDAY, SUNDAY -> System.out.println(6);
case TUESDAY -> System.out.println(7);
case THURSDAY, SATURDAY -> System.out.println(8);
case WEDNESDAY -> System.out.println(9);
}
```
## Java 13
JDK 13 2019 9 17 LTS
- [JEP 350: Dynamic CDS Archives ( CDS )](https://openjdk.org/jeps/350)
- [JEP 351: ZGC: Uncommit Unused Memory (ZGC )](https://openjdk.org/jeps/351)
- [JEP 355: Text Blocks (Preview) (, )](https://openjdk.org/jeps/355)
- [JEP 354: Switch Expressions (Second Preview) (switch , )](https://openjdk.org/jeps/354)
JDK 8 JDK 24

### JEP 351: ZGC
Java 11 ZGC
ZGC ZPages GC ZPages **ZPageCache** ZPages LRU
Java 13 ZGC
### JEP 350: Dynamic CDS Archives CDS
Java 13 Java 10 (AppCDS)** Java ** CDS
[AppCDS](https://openjdk.java.net/jeps/310)
```bash
java -XX:ArchiveClassesAtExit=my_app_cds.jsa -cp my_app.jar
java -XX:SharedArchiveFile=my_app_cds.jsa -cp my_app.jar
```
### JEP 355: Text Blocks
Java ****
Java 13 `"""`
HTML
```java
String json ="{\n" +
" \"name\":\"mkyong\",\n" +
" \"age\":38\n" +
"}\n";
```
HTML
```java
String json = """
{
"name":"mkyong",
"age":38
}
""";
```
SQL
```sql
String query = "SELECT `EMP_ID`, `LAST_NAME` FROM `EMPLOYEE_TB`\n" +
"WHERE `CITY` = 'INDIANAPOLIS'\n" +
"ORDER BY `EMP_ID`, `LAST_NAME`;\n";
```
SQL
```sql
String query = """
SELECT `EMP_ID`, `LAST_NAME` FROM `EMPLOYEE_TB`
WHERE `CITY` = 'INDIANAPOLIS'
ORDER BY `EMP_ID`, `LAST_NAME`;
""";
```
`formatted()``stripIndent()``translateEscapes()` [API - String ](#string-)
### JEP 354: Switch Expressionsswitch
`Switch` `Switch` `yield`
`yield` `return` `return` `yield` `Switch` `yield` `default`
```java
private static String descLanguage(String name) {
return switch (name) {
case "Java": yield "object-oriented, platform independent and secured";
case "Ruby": yield "a programmer's best friend";
default: yield name +" is a good language";
};
}
```
## API
API JEPJava Enhancement Proposal
JDK **JEP** `switch` JVM ZGC `String.indent()` JDK **JBS (JDK Bug System)** Ticket
### String
Java 12
#### indent() -
`indent()`
```java
String text = "Java";
// 4
text = text.indent(4);
System.out.println(text);
text = text.indent(-10);
System.out.println(text);
```
```plain
Java
Java
```
#### transform() -
`transform()`
```java
String result = "foo".transform(input -> input + " bar");
System.out.println(result); // foo bar
```
### Files
Java 12 `mismatch()`
```java
public static long mismatch(Path path, Path path2) throws IOException
```
`mismatch()` -1L
```java
Path filePath1 = Files.createTempFile("file1", ".txt");
Path filePath2 = Files.createTempFile("file2", ".txt");
Files.writeString(filePath1, "Java 12 Article");
Files.writeString(filePath2, "Java 12 Article");
long mismatch = Files.mismatch(filePath1, filePath2);
assertEquals(-1, mismatch);
```
```java
Path filePath3 = Files.createTempFile("file3", ".txt");
Path filePath4 = Files.createTempFile("file4", ".txt");
Files.writeString(filePath3, "Java 12 Article");
Files.writeString(filePath4, "Java 12 Tutorial");
long mismatch = Files.mismatch(filePath3, filePath4);
assertEquals(8, mismatch);
```
### NumberFormat
Java 12 `NumberFormat`
```java
NumberFormat fmt = NumberFormat.getCompactNumberInstance(Locale.US, NumberFormat.Style.SHORT);
String result = fmt.format(1000);
System.out.println(result);
```
:
```plain
1K
```
### Socket API
Java 13 Socket API `NioSocketImpl` `PlainSocketImpl` `java.util.concurrent` `-Djdk.net.usePlainSocketImpl=true`
Java 13 Socket
```java
public final class NioSocketImpl extends SocketImpl implements PlatformSocketImpl {
}
```
### FileSystems
Java 13 `FileSystems`
- `newFileSystem(Path)`
- `newFileSystem(Path, Map)`
- `newFileSystem(Path, Map, ClassLoader)`
### String
Java 13 Text Blocks`String` 3
- `formatted(Object... args)` `String` `format()`
- `stripIndent()`
- `translateEscapes()` _"\\\t"_ _"\t"_
```java
@Deprecated(forRemoval=true, since="13")
public String stripIndent() {
}
@Deprecated(forRemoval=true, since="13")
public String formatted(Object... args) {
}
@Deprecated(forRemoval=true, since="13")
public String translateEscapes() {
}
```
[JEP 355: Text Blocks (Preview)](#jep-355-text-blocks-preview)
##
###
oracle `This is a preview feature, which is a feature whose design, specification, and implementation are complete, but is not permanent, which means that the feature may exist in a different form or not at all in future JDK releases. To compile and run code that contains preview features, you must specify additional command-line options.`
JDK
`switch` Java 12 Java 13 Java 14 JDK JDK
JDK
### JVM
Java JVM
****
Java **JVM **
##
- JDK Project Overview
- Oracle Java12 ReleaseNote
- What is new in Java 12
- Oracle Java13 ReleaseNote
- New Java13 Features
- Java13