For investors
股价:
5.36 美元 %For investors
股价:
5.36 美元 %认真做教育 专心促就业
前一段时间我们曾经给大家简单介绍了关于java10的特性以及发布日期等事情。今天,我们一起来正式了解一下java10编程开发语言的新特性都有哪些,以及针对这些特性的使用方法。
Java10新特性
这次发布的Java10,新带来的特性并不多。
根据官网公开资料,共有12个JEP(JDKEnhancementProposal特性加强提议),带来以下加强功能:
JEP286,var局部变量类型推断。
JEP296,将原来用Mercurial管理的众多JDK仓库代码,合并到一个仓库中,简化开发和管理过程。
JEP304,统一的垃圾回收接口。
JEP307,G1垃圾回收器的并行完整垃圾回收,实现并行性来改善坏情况下的延迟。
JEP310,应用程序类数据(AppCDS)共享,通过跨进程共享通用类元数据来减少内存占用空间,和减少启动时间。
JEP312,ThreadLocal握手交互。在不进入到全局JVM安全点(Safepoint)的情况下,对线程执行回调。优化可以只停止单个线程,而不是停全部线程或一个都不停。
JEP313,移除JDK中附带的javah工具。可以使用javac-h代替。
JEP314,使用附加的Unicode语言标记扩展。
JEP317,能将堆内存占用分配给用户指定的备用内存设备。
JEP317,使用Graal基于Java的编译器,可以预先把Java代码编译成本地代码来提升效能。
JEP318,在OpenJDK中提供一组默认的根证书颁发机构证书。开源目前Oracle提供的的JavaSE的根证书,这样OpenJDK对开发人员使用起来更方便。
JEP322,基于时间定义的发布版本,即上述提到的发布周期。版本号为\$FEATURE.\$INTERIM.\$UPDATE.\$PATCH,分别是大版本,中间版本,升级包和补丁版本。
部分特性说明
1.var类型推断。
这个语言功能在其他一些语言(C#、JavaScript)和基于JRE的一些语言(Scala和Kotlin)中,早已被加入。
在Java语言很早就在考虑,早在2016年正式提交了JEP286提议。后来举行了一次公开的开发工程师调查,获得多建议的是采用类似Scala的方案,“同时使用val和var”,约占一半;二多的是“只使用var”,约占四分之一。后来Oracle公司经过慎重考虑,采用了只使用var关键字的方案。
开发工程师无须声明并且import引入Stream类型,只用stream作为中间变量,用var关键字使得开发效率提升。
不过var的使用有众多限制,包括不能用于推断方法参数类型,只能用于局部变量,如方法块中,而不能用于类变量的声明,等等。
另外,我个人认为,对于开发工程师而言,变量类型明显的声明会提供更加全面的程序语言信息,对于理解并维护代码有很大的帮助。一旦var被广泛运用,开发工程师阅读三方代码而没有IDE的支持下,会对程序的流程执行理解造成一定的障碍。所以我建议尽量写清楚变量类型,程序的易读维护性有时更重要一些。
2.统一的GC接口
在JDK10的代码中,路径为openjdk/src/hotspot/share/gc/,各个GC实现共享依赖shared代码,GC包括目前默认的G1,也有经典的Serial、Parallel、CMS等GC实现。
3.应用程序类数据(AppCDS)共享
CDS特性在原来的bootstrap类基础之上,扩展加入了应用类的CDS(ApplicationClass-DataSharing)支持。
其原理为:在启动时记录加载类的过程,写入到文本文件中,再次启动时直接读取此启动文本并加载。设想如果应用环境没有大的变化,启动速度就会得到提升。
我们可以想像为类似于操作系统的休眠过程,合上电脑时把当前应用环境写入磁盘,再次使用时就可以快速恢复环境。
4.JEP314,使用附加的Unicode语言标记扩展。
JDK10对于UnicodeBCP47有了更多的支持,BCP47是IETF定义语言集的规范文档。使用扩展标记,可以更方便的获得所需要的语言地域环境。
5.查看当前JDK管理根证书。
自JDK9起在keytool中加入参数-cacerts,可以查看当前JDK管理的根证书。而OpenJDK9中cacerts为空,这样就会给开发工程师带来很多不变。
下一版本展望
下一个Java大版本会是Java11,也是Java8之后的LTS版本,预计会在今年的9月份发布。目前只有四个JEP,更多加强提议会逐步加入。
这个版本会充分发挥模块化的能力,把当前JDK中的关于JavaEE和Corba的部分移除,变得更加紧凑。
虽然JDK9大的亮点是模块化,但Java业界广泛接纳并且适应需要一个过程。当前已经有一些支持模块化的类库,如log4j2,但大多数还未支持。
可以预见JDK11发布之后,模块化特性就成为长期支持特性,会有越来越多的类库提供对模块化的支持。
Java依然会是适合应用开发的语言和平台,庞大的社区和广泛的开发工程师,会不断促使Java不断完善优化,在各个编程领域继续发扬光大。
对文中引用文章原作者表示致谢!引用的图示,数据和方法都属于原作者。下一个Java大版本会是Java11,也是Java8之后的LTS版本,预计会在今年的9月份发布。目前只有四个JEP,更多加强提议会逐步加入。这个版本会充分发挥模块化的能力,把当前JDK中的关于JavaEE和Corba的部分移除,变得更加紧凑。虽然JDK9大的亮点是模块化,但Java业界广泛接纳并且适应需要一个过程。当前已经有一些支持模块化的类库,如log4j2,但大多数还未支持。可以预见JDK11发布之后,模块化特性就成为长期支持特性,会有越来越多的类库提供对模块化的支持。Java依然会是适合应用开发的语言和平台,庞大的社区和广泛的开发工程师,会不断促使Java不断完善优化,在各个编程领域继续发扬光大。对文中引用文章原作者表示致谢!引用的图示,数据和方法都属于原作者。
作者:张建锋
来源:infoq
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。