目前最新JDK 11,Oracle会一直维护到2026年。html
Unicode 10(version 10.0 of the Unicode Standard),Unicode是一个不断在演进的行业标准,Java一直在与它保持一致兼容。java
Java8已经更新了Unicode8.0-9.0,Java10更新后将达到16018个characters、18种blocks和10种scripts。linux
原来做为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()); // 200System.out.println(response.body()); // 百度页面的html
java.util.Collection增长新方法toArray(IntFunction),集合转数组的不二之选。并发
String增长lines\stripLeading\stripTrailing等,通常项目都有StringUtils类。oracle
java.io.InputStream增长构造方法
java.nio包下面很大类扩展了方法Channels\XXXBuffer等
推荐一篇博客:Java 11 新增 API 初探,总结的比较细致。
JVM启动参数新增-XX:+UseDynamicNumberOfCompilerThreads
,动态的控制编程线程的数量,原来的编译线程默认会启动大量形成cpu和memory浪费。
低功耗可扩展GC(ZGC)模块是一个试验性的并发GC,在线程执行是ZGC会作一些重型回收工做,如string表清理等。执行周期在10ms内,处理heaps大小从MB到TB范围,目前只能支持linux和x64系统,除此外还有个处理memory分配的Epsilon GZ,有兴趣的能够本身研究。
提供了一个低负载的堆分配采集分析程序:JVMTI,默认启动方案能够持续工做且不形成服务器压力,面向接口编程,可以收集活着和死去的对象信息。
简称TLS1.3是网络传输层协议,须要注意的它不兼容历史版本并且官方认可有风险,但愿后续能不断优化。
嵌套是一种访问控制上下文,它容许多个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()
对PKCS#1 v2.2内提供更多算法,如RSASSA-PSS签名算法。同时新增ChaCha20和Poly1305密码算法,经过Cipher.getInstance
使用。还有 Curve25519和Curve448被添加。AES128和265也支持了Kerberos 5 encryption。
简单理解就是lambda表达式的变量申明能够用var。
lst.forEach((var x) -> { System.out.print(x); });
单个的*.java文件能够直接用java命令来执行,格式:java HelloWorld.java
。
Jvm启动参数:-XX:StartFlightRecording
Java11中将这款原来商用的工具集成到jdk标准中了,它是一种低开销的事件信息收集框架,用来对应用程序和JVM 进行故障检查、分析,收集应用程序、JVM 和 OS的数据并保存在单独的事件记录文件中,故障发生后,可以从事件记录文件中提取出有用信息对故障进行分析。
还有不少其余更新就不一一介绍了,这些都是JDK标准包支持的基础能力,得感谢Oracle持续对JDK发布的支持。完整的jdk11变化清单能够去官网查看;
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位操做系统支持的版本。
新启的Java项目建议直接从Oracle JDK 11开始搭建,千万不要犹豫,由于技术都是越新越强的。Java8就像晚期的大众,而Java11倒是新兴的特斯拉。
历史的项目若是只是维护的话,干脆就放着运行不要动好了,等哪天决定重构了再考虑升级到Java11。由于最大的问题不是本身公司开发的Code不能迁移到高版本,而是项目中引入的第三方Jar,这个东西搞起来十分头疼。焦做国医堂胃肠医院怎么样:http://jz.lieju.com/zhuankeyiyuan/37174739.htm
升级最担忧的就是被删除的模块!
推荐IBM公司Liberty团队提供了一个十分好用的检测Toolkit程序,能够扫描应用程序二进制文件(.war),发现的任何潜在的Java 11问题并生成Html报告。绝对的大利器,详细内容直接查看IBM官方介绍:Scanner Kit。
直接运行java -jar binaryAppScannerInstaller.jar
,按步骤安装有个lisence声明和目录指定,默认目录名wamt
。
参考文档中会有使用详细介绍,也能够参考下面测试例子(扫描很慢,要些耐心等):
java -jar binaryAppScanner.jar Root.war --analyzeJavaSE --sourceJava=oracle8 --targetJava=java11 --output=./java11/RootReport.html
查看帮助命令:
java -jar binaryAppScanner.jar Root.war --help --all
报告结果以下:
推荐Oracle JDK,由于更加稳定可靠。
只有Oracle JDK支持Solaris系统;
只有Oracle JDK才支持msi这样的安装程序;
Oracle JDK版本将每三年发布一次,而OpenJDK版本每三个月发布一次;
OpenJDK 是一个参考模型而且是彻底开源的,而Oracle JDK是 OpenJDK的一个实现,并非彻底开源的;
Oracle JDK 比 OpenJDK 更稳定。OpenJDK和Oracle JDK的代码几乎相同,但建议您选择Oracle JDK,由于它通过了完全的测试和稳定修复;
在响应性和JVM性能方面,Oracle JDK与OpenJDK相比提供了更好的性能;
Oracle JDK不会为即将发布的版本提供长期支持,用户每次都必须经过更新到最新版本得到支持来获取最新版本;
Oracle JDK根据二进制代码许可协议得到许可,而OpenJDK根据GPL v2许可得到许可。Oracle公司很善于打官司,因此这点很重要。https://www.jianshu.com/p/77c2ae79d38b