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

---
title: Java 9 
description:  Java 9  jlink 
category: Java
tag:
  - Java
head:
  - - meta
    - name: keywords
      content: Java 9,JDK9,,JPMS,jlink,, API
---

**Java 9**  2017  9  21  Java 8  3 Java 9  Java `Stream` 

JDK 9  LTS JDK8JDK11JDK17JDK21 



- [JEP 222: Java Shell Tool (JShell)](https://openjdk.org/jeps/222)
- [JEP 261: Module System ()](https://openjdk.org/jeps/261)
- [JEP 248: G1 Becomes the Default Garbage Collector (G1 )](https://openjdk.org/jeps/248)
- [JEP 254: Compact Strings ()](https://openjdk.org/jeps/254)
- [JEP 193: Variable Handles ()](https://openjdk.org/jeps/193)

 JDK 8  JDK 25 

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

## JEP 222: Java Shell Tool (JShell)

JShell  Java 9  Java  Python 

 JShell 

![](https://oss.javaguide.cn/java-guide-blog/image-20210816083417616.png)

**JShell **

1.  Java "Hello World"
2.  IDE  IDEIDE 
3. 

**JShell **

1. JShell 
2. JShell 
3. JShell  `1 + 1`
4. 

## JEP 261: Module System ()

[Jigsaw Project](https://openjdk.java.net/projects/jigsaw/) Java 

**** 

> A uniquely named, reusable group of related packages, as well as resources (such as images and XML files) and a module descriptor

`module-info.java`

 jar `module-info.java`

![](https://oss.javaguide.cn/java-guide-blog/module-structure.png)

JDK  94 Java  **[jlink](http://openjdk.java.net/jeps/282) ** (Jlink  Java 9  Java  JRE) JDK  Java 

 `exports` 

```java
module my.module {
    //exports 
    exports com.my.package.name;
}

module my.module {
     //exportsto 
    exports com.my.package.name to com.specific.package;
}
```

 Java 9 

- [Project Jigsaw: Module System Quick-Start Guide](https://openjdk.java.net/projects/jigsaw/quick-start)
- [Java 9 Modules: part 1](https://stacktraceguru.com/java9/module-introduction)
- [Java 9 2. ](http://www.cnblogs.com/IcanFixIt/p/6947763.html)

## JEP 248: G1 Becomes the Default Garbage Collector (G1 )

 Java 8  Parallel Scavenge+Parallel Old Java 9, CMS **G1Garbage-First Garbage Collector** 

G1  Java 7 

## JEP 193: Variable Handles ()



 `MethodHandle`  Java  `java.lang.invoke.VarHandle`  `java.lang.invoke.MethodHandles.Lookup`  `VarHandle` 

`VarHandle`  `java.util.concurrent.atomic`  `sun.misc.Unsafe`  API

## API 

 API  JEPJava Enhancement Proposal

 JDK **JEP**  JVM  `List.of()`  JDK  **JBS (JDK Bug System)** Ticket

### 

`List.of()``Set.of()``Map.of()`  `Map.ofEntries()` Guava 

```java
List.of("Java", "C++");
Set.of("Java", "C++");
Map.of("Java", 1, "C++", 2);
```

 `of()`   `java.lang.UnsupportedOperationException` 

### Stream 

`Stream`  `ofNullable()``dropWhile()``takeWhile()`  `iterate()` 

Java 9  `ofNullable()`   `Stream` `Stream`   Java 8  `Stream` 

```java
Stream stringStream = Stream.ofNullable("Java");
System.out.println(stringStream.count());// 1
Stream nullStream = Stream.ofNullable(null);
System.out.println(nullStream.count());//0
```

`takeWhile()`  `Stream` 

```java
List integerList = List.of(11, 33, 66, 8, 9, 13);
integerList.stream().takeWhile(x -> x < 50).forEach(System.out::println);// 11 33
```

`dropWhile()`  `takeWhile()` 

```java
List integerList2 = List.of(11, 33, 66, 8, 9, 13);
integerList2.stream().dropWhile(x -> x < 50).forEach(System.out::println);// 66 8 9 13
```

`iterate()`  `Predicate`  ()

```java
public static Stream iterate(final T seed, final UnaryOperator f) {
}
// 
public static Stream iterate(T seed, Predicate

Web Proxy Viewer  |  New URL  |  Original Page