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

---
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 

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

### 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 

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

### 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  



Web Proxy Viewer  |  New URL  |  Original Page