JDK新特性(4)

新特性(4)  API的变化

1、Optional

Optional<T> 类(java.util.Optional) 是一个容器类,它可以保存类型T的值,代表这个值存在。或者仅仅保存null,表示这个值不存在。如果值存在,则isPresent()方法会返回true,调用get()方法会返回该对象。

Optional提供很多有用的方法,这里我们不用显式进行空值检测。

  • 创建Optional类对象的方法:
  • static  Optional empty() :用来创建一个空的Optional实例
    • static  Optional of(T value) :用来创建一个Optional实例,value必须非空
    • static <T> Optional<T> ofNullable(T value) :用来创建一个Optional实例,value可能是空,也可能非空
  • 判断Optional容器中是否包含对象:
    • boolean isPresent() : 判断Optional容器中的值是否存在
    • void ifPresent(Consumer<? super T> consumer) :判断Optional容器中的值是否存在,如果存在,就对它进行Consumer指定的操作,如果不存在就不做

获取Optional容器的对象:

  • T get(): 如果调用对象包含值,返回该值。否则抛异常。T get()与of(T value)配合使用
  • T orElse(T other):orElse(T other) 与ofNullable(T value)配合使用,如果Optional容器中非空,就返回所包装值,如果为空,就用orElse(T other)other指定的默认值(备选)代替
  • T orElseGet(Supplier<? extends T> other) :如果Optional容器中非空,就返回所包装值,如果为空,就用Supplier接口的Lambda表达式提供的值代替
  • T orElseThrow(Supplier<? extends X> exceptionSupplier) :如果Optional容器中非空,就返回所包装值,如果为空,就抛出指定的异常类型代替原来的NoSuchElementException

2、String的存储结构

Jdk9;String 不再采用 char[] 来存储,改成了 byte[] 加上编码标记,节约了一些空间。

11新特性:新增了一系列字符串处理方法

描述

举例

判断字符串是否为空白

" ".isBlank(); // true

去除首尾空白

" Javastack ".strip(); // "Javastack"

去除尾部空格

" Javastack ".stripTrailing(); // " Javastack"

去除首部空格

" Javastack ".stripLeading(); // "Javastack "

复制字符串

"Java".repeat(3);// "JavaJavaJava"

行数统计

"A\nB\nC".lines().count(); // 3

JDK12新特性:String 实现了 Constable 接口

java.lang.constant.Constable接口定义了抽象方法:

public interface Constable {
Optional<? extends ConstantDesc> describeConstable();
}

实质上:调用 Optional.of 方法返回一个 Optional 类型。

JDK12新特性:String新增方法

String的transform(Function)

var result = "foo".transform(input -> input + " bar");
System.out.println(result); //foo bar

3、GC新特性

GC是Java主要优势之一。 然而,当GC停顿太长,就会开始影响应用的响应时间。随着现代系统中内存不断增长,用户和程序员希望JVM能够以高效的方式充分利用这些内存, 并且无需长时间的GC暂停时间。

JDK9以后默认的垃圾回收器是G1GC。

JDK10 : 为G1提供并行的Full GC

G1最大的亮点就是可以尽量的避免full gc。但毕竟是“尽量”,在有些情况下,G1就要进行full gc了,比如如果它无法足够快的回收内存的时候,它就会强制停止所有的应用线程然后清理。

在Java10之前,一个单线程版的标记-清除-压缩算法被用于full gc。为了尽量减少full gc带来的影响,在Java10中,就把之前的那个单线程版的标记-清除-压缩的full gc算法改成了支持多个线程同时full gc。这样也算是减少了full gc所带来的停顿,从而提高性能。

你可以通过-XX:ParallelGCThreads参数来指定用于并行GC的线程数。

JDK11:引入革命性的 ZGC

ZGC是一个并发、基于region、压缩型的垃圾收集器。

JDK12:可中断的 G1 Mixed GC

JDK12:增强G1,自动返回未用堆内存给操作系统

JDK12:Shenandoah GC:低停顿时间的G旨在针对 JVM 上的内存收回实现低停顿的需求

Shenandoah 垃圾回收器的暂停时间与堆大小无关

JDK13:ZGC:将未使用的堆内存归还给操作系统

JDK15:Shenandoah垃圾回收算法转正

JDK15:ZGC 功能转正

ZGC是Java 11引入的新的垃圾收集器,经过了多个实验阶段,自此终于成为正式特性。

JDK16:ZGC 并发线程处理

在线程的堆栈处理过程中,总有一个制约因素就是safepoints。在safepoints这个点,Java的线程是要暂停执行的,从而限制了GC的效率。

而ZGC的并发线程堆栈处理可以保证Java线程可以在GC safepoints的同时可以并发执行。它有助于提高所开发的Java软件应用程序的性能和效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值