Java11新特性相关理解

声明

1)该文章整理自网上的大牛和专家无私奉献的资料,具体引用的资料请看参考文献。
2)本文仅供学术交流,非商用。如果某部分不小心侵犯了大家的利益,还望海涵,并联系博主删除。
3)博主才疏学浅,文中如有不当之处,请各位指出,共同进步,谢谢。
4)此属于第一版本,若有错误,还需继续修正与增删。还望大家多多指点。大家都共享一点点,一起为祖国科研的推进添砖加瓦。

1、更新支持到Unicode 10编码

Unicode 10(version 10.0 of the Unicode Standard),Unicode是一个不断在演进的行业标准,Java一直在与它保持一致兼容。

Java8已经更新了Unicode8.0-9.0,Java10更新后将达到16018个characters、18种blocks和10种scripts。

2、将Http Client作为JDK标准发布

原来作为jdk补充的http类放在jdk.incubator.http包中,现在统一改到java.net.http包下,核心类有下面4个。

HttpClient

HttpRequest

HttpResponse

WebSocket

HttpClient client = HttpClient.newBuilder()

        .version(HttpClient.Version.HTTP_1_1)

        .connectTimeout(Duration.ofSeconds(3))

        .build();

HttpRequest request = HttpRequest.newBuilder().uri(URI.create("http://www.baidu.com")).build();

HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());

System.out.println(response.statusCode());    // 200

System.out.println(response.body());          // 百度页面的html

3、新增优化很多方法

java.util.Collection增加新方法toArray(IntFunction),集合转数组的不二之选。

String增加lines\stripLeading\stripTrailing等,一般项目都有StringUtils类。

java.io.InputStream增加构造方法

java.nio包下面很大类扩展了方法Channels\XXXBuffer等

4、支持动态分配 Compiler Threads

JVM启动参数新增-XX:+UseDynamicNumberOfCompilerThreads,动态的控制编程线程的数量,原来的编译线程默认会启动大量造成cpu和memory浪费。

5、GC能力大幅提升

低功耗可扩展GC(ZGC)模块是一个试验性的并发GC,在线程执行是ZGC会做一些重型回收工作,如string表清理等。执行周期在10ms内,处理heaps大小从MB到TB范围,目前只能支持linux和x64系统,除此外还有个处理memory分配的Epsilon GZ,有兴趣的可以自己研究。

6、堆分析能力提升:JVMTI

提供了一个低负载的堆分配采集分析程序:JVMTI,默认启动方案可以持续工作且不造成服务器压力,面向接口编程,能够收集活着和死去的对象信息。

7、Transport Layer Security 1.3更新

简称TLS1.3是网络传输层协议,需要注意的它不兼容历史版本而且官方承认有风险,希望后续能不断优化。

8、嵌套访问控制

嵌套是一种访问控制上下文,它允许多个class同属一个逻辑代码块,但是被编译成多个分散的class文件,它们访问彼此的私有成员无需通过编译器添加访问扩展方法。

例子:

/**

* @author: Owen Jia

* @time: 2019/11/7

*/

public class NestBasedTest {

    public static class Nest1 {

        private int varNest1;

        public void f() throws Exception {

            final Nest2 nest2 = new Nest2();

            //这里没问题

            nest2.varNest2 = 2;

            final Field f2 = Nest2.class.getDeclaredField("varNest2");

            //下面代码在java 8环境下会报错,但在java 11中是没问题的

            f2.setInt(nest2, 1);

            System.out.println(nest2.varNest2);

        }

    }

    public static class Nest2 {

        private int varNest2;

    }

    public static void main(String[] args) throws Exception {

        new Nest1().f();

    }

}

这里要提一下Class类新增的方法:

/// 获取宿主类。非嵌套类的宿主类是它本身。

public Class<?> getNestHost()

// 判断该类是否是某个类的嵌套类

public boolean isNestmateOf(Class<?> c)

// 返回某个类的嵌套类数组。第 1 个固定是宿主类,之后的是该宿主类的嵌套成员,但不保证顺序,同时也会包含自身

public Class<?>[] getNestMembers()

9、新增和优化诸多加密算法

对PKCS#1 v2.2内提供更多算法,如RSASSA-PSS签名算法。同时新增ChaCha20和Poly1305密码算法,通过Cipher.getInstance使用。还有 Curve25519和Curve448被添加。AES128和265也支持了Kerberos 5 encryption。

10、本地参数支持Lambda

简单理解就是lambda表达式的变量申明可以用var。

lst.forEach((var x) -> {System.out.print(x);});复制代码

11、单java文件加载运行

单个的*.java文件可以直接用java命令来执行,格式:java HelloWorld.java。

12、飞行记录器分析工具

Jvm启动参数:-XX:StartFlightRecording
Java11中将这款原来商用的工具集成到jdk标准中了,它是一种低开销的事件信息收集框架,用来对应用程序和JVM 进行故障检查、分析,收集应用程序、JVM 和 OS的数据并保存在单独的事件记录文件中,故障发生后,能够从事件记录文件中提取出有用信息对故障进行分析。
更多其他能力
还有很多其他更新就不一一介绍了,这些都是JDK标准包支持的基础能力,得感谢Oracle持续对JDK发布的支持。完整的jdk11变化清单可以去官网查看;

11开始移除的模块清单
Removal of com.sun.awt.AWTUtilities Class

Removal of Lucida Fonts from Oracle JDK

Removal of appletviewer Launcher

Oracle JDK's javax.imageio JPEG Plugin No Longer Supports Images with alpha

Removal of sun.misc.Unsafe.defineClass

Removal of Thread.destroy() and Thread.stop(Throwable) Methods

Removal of sun.nio.ch.disableSystemWideOverlappingFileLockCheck Property

Removal of sun.locale.formatasdefault Property

Removal of JVM-MANAGEMENT-MIB.mib

Removal of SNMP Agent

Remove the Java EE and CORBA Modules

Removal of JavaFX from the Oracle JDK

Removal of JMC from the Oracle JDK

Removal of Java Deployment Technologies

更多请查看官网

升级建议(重要)
从Java 11后Oracle不再单独发布JRE和Server JRE了,并统一JDK名称为:Oracle JDK。

另外Java 11及之后的版本,将不会再发布对32位操作系统支持的版本。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值