Java 11新特性

1.字符串API增强


 1. isBank() 判断是否为空字符串 或者 trim()之后是否为空字符串
	 String blankStr = "    ";
	 // true
	 boolean trueVal = blankStr.isBlank();
 2. lines() 符串按照行终止符(换行符\n或者回车符\r)进行分割,并将分割为StreamString newStr = "Hello Java 11 \n felord.cn \r 2021-09-28";Stream<String> lines = newStr.lines();
	 lines.forEach(System.out::println);
 3. strip() 去除字符串前后的“全角和半角”空白字符
	 String str = "HELLO\u3000";
	 // str = 6
	 System.out.println("str = " + str.length());
	 // trim = 6
	 System.out.println("trim = " + str.trim().length());
	 // strip = 5
	 System.out.println("strip = " + str.strip().length());
	 从上面也看出来了差别,trim()只能去除半角空白符。
	 strip()方法还有两个变种,
	 stripLeading()用来去除前面的全角半角空白符;
	 stripTrailing()用来去除尾部的全角半角空白符。
  4.repeat(n)按照给定的次数重复串联字符串的内容:
      String str = "HELLO"
	  // 空字符
	  String empty = str.repeat(0);
	  // HELLO
	  String repeatOne = str.repeat(1);
	  // HELLOHELLO
	  String repeatTwo = str.repeat(2);

	  

2.集合转对应的数组

      List<String> sampleList = Arrays.asList("张三", "java 11");
      // array = {"张三", "java 11"};
      String[] array = sampleList.toArray(String[]::new);

3. var 修饰lambda局部变量
4. 断言取反

       List<String> sampleList = Arrays.asList("张三", "java 11","jack");
       List<String> result = sampleList.stream()
            // 过滤以j开头的字符串 
            // var 修饰lambda局部变量
            .filter((@NotNull var s) -> s.startsWith("j"))
            // 同时不包含11的字符串 断言取反
            .filter(Predicate.not((@NotNull var s) -> s.contains("11")))
            .collect(Collectors.toList());          

5.Stream 数据流新方法

1.ofNullable() 单个元素构造流
 		int count = Stream.ofNullable(null).count();   // 0
2.of() 单个元素构造流 // {1,2,3}
 		List<Integer> list = Stream.of(1,2,3)..collect(Collectors.toList());
3.dropWhile() 判断放弃哪个元素
		Stream.of(1, 2, 3, 2, 1)
    		.dropWhile(n -> n < 3)
    		.collect(Collectors.toList());  // [3, 2, 1]		
4.takeWhile() 判断选用哪个元素	
		Stream.of(1, 2, 3, 2, 1)
		    .takeWhile(n -> n < 3)
		    .collect(Collectors.toList());  // [1, 2]   		   

6.Optional 新方法

// 你现在可以简单地将 Optionals 转换为流,或者提供另一个 Optionals 作为空 Optionals 的回调
		Optional.of("foo").orElseThrow();     // foo
		Optional.of("foo").stream().count();  // 1
		Optional.ofNullable(null)
		    .or(() -> Optional.of("fallback"))
		    .get();     

7.Epsilon垃圾收集器

简介:(A No-Op Garbage Collector)垃圾回收器控制内存分配,但是不执行任何垃圾回收工作。一旦java的堆被耗尽,jvm就直接关闭。设计的目的是提供一个完全消极的GC实现,分配有限的内存分配,最大限度降低消费内存占用量和内存吞吐时的延迟时间。一个好的实现是隔离代码变化,不影响其他GC,最小限度的改变其他的JVM代码。
用法:VM options选项中配置 -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC
示例:
package com.xz.jdk11.day1;
import java.util.ArrayList;
import java.util.List;

/**
 * @description:
 * @author: xz
 */
public class EpsilonTest {
    public static void main(String[] args) {
        boolean flag = true;
        List<Garbage> list = new ArrayList<>();
        long count = 0;
        while (flag) {
            list.add(new Garbage());
            if (count++ ==100) {
                list.clear();
                count++;
            }
        }
        System.out.println("程序结束");
    }
}

class Garbage {
    //这个方法是GC再清除本对象时,会调用一次
    @Override
    public void finalize() {
        System.out.println(this + "垃圾收集");
    }
}
结果:使用选项 -XX:+UseEpsilonGC, 程序很快就因为堆空间不足而退出
原因:提供完全被动的GC实现,,具有有限的分配限制和尽可能低的延迟开销,但代价是内存占用和内存吞吐量。java实现可广泛选择高度可配置的GC实现。各种可用的收集器最终满足不同的需求,,即使它们的可配置性使它们的功能相交。 有时更容易维护单独的实现,,而不是在现有GC实现上堆积另一个配置选项。
用途:
	1.性能测试(它可以帮助过滤掉GC引起的性能假象)
	2.内存压力测试(例如,知道测试用例 应该分配不超过1GB的内存, 我们可以使用-Xmx1g –XX:+UseEpsilonGC, 如果程序有问题, 则程序会崩溃)
	3.非常短的JOB任务(对象这种任务, 接受GC清理堆那都是浪费空间)
	4.VM接口测试
	5.Last-drop 延迟&吞吐改进


原文链接:https://blog.csdn.net/li1325169021/article/details/128388110

8.ZGC垃圾回收器

ZGC垃圾回收器
据说这是JDK11最为瞩目的特性,没有之一,是最重磅的升级,那么ZGC的优势在哪里呢?
 1.GC暂停时间不会超过10毫秒
 2.既能处理几百兆的小堆,也能处理几个T的大堆
 3.和G1相比,应用吞吐能力不会下降超过15%
 4.为未来的GC功能和利用colord指针以及Load barriers优化奠定了基础
ZGC是一个并发、基于region、压缩型的垃圾收集器,只有root扫描阶段会STW(strop the world,停止所有线程),因此ZGC的停顿时间不会随着堆的增长和存活对象的增长而变长。用法:-XX:UnlockExperimentalVMOptions -XX:+UseZGC虽然功能如此强大,但很遗憾的是,在Windows系统的JDK中并没有提供ZGC,所以也就没有办法测试了
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值