相信对于Java 9的频繁跳票,很多人还心有余悸。虽然Java 10的推出时间,Oracle曾亲自背书不会跳票,但是这按时推出的风格还是让我们有些适应不良。
Java 10的发布虽然与Java 9相隔只有半年时间,但是更新的内容却很丰富,共计提供了109项新功能的支持。其中包括12项关键的新特性:
·局部变量的类型推断;
·将 JDK 的多个代码仓库合并到一个储存库中;
·垃圾收集器接口,通过引入一个干净的垃圾收集器(GC)接口,改善不同垃圾收集器的源码隔离性;
·向 G1 引入并行 Full GC;
·应用类数据共享,为改善启动和占用空间,在现有的类数据共享(“CDS”)功能上再次拓展,以允许应用类放置在共享存档中;
·线程局部管控,允许停止单个线程,而不是只能启用或停止所有线程;
·移除 Native-Header Generation Tool (javah);
·额外的 Unicode 语言标签扩展。包括:cu (货币类型)、fw (每周第一天为星期几)、rg (区域覆盖)、tz (时区) 等;
·在备用内存设备上分配堆内存,允许 HotSpot 虚拟机在备用内存设备上分配 Java 对象堆;
·基于 Java 的 JIT 编译器(试验版本);
·根证书,开源 Java SE Root CA 程序中的根证书;
·基于时间的版本发布模式,“Feature releases” 版本将包含新特性,“Update releases” 版本仅修复 Bug。
千呼万唤始出来的局部变量的类型推断
如果要说这次Java 10更新中有哪个功能是最受瞩目的?那么,一定非“局部变量的类型推断”莫属。在发布之前,Java 10发布方在网上共计进行了2轮,超2500名使用者的意见征集。最后结果显示,有74%的使用者强烈支持这个功能的发布,12%仅表示了支持,10%的人认为这个功能并不是个好主意。
“局部变量的类型推断”功能意味着未来开发者可以在 Java 10 中引入其他编程语言中常见的var,但需要注意,var不能成为一个关键字,而是一个保留字。开发者可以写这样的代码:var list=new ArrayList<String>(),编辑器可以自动推测出list的类型。
虽然这个功能在写代码的时候给我们带来了便利,但是也有网友针对该功能提出一些异议:
网友1:个人以为,var的引入,在读源码的角度上讲是灾难性的!尤其是对我这种大脑内部堆栈比较浅的人来说。
网友2:真的要这么搞?用var的确可以在写代码的时候提升一点效率,可是读代码呢??我以后是不是要养成从右往左读的习惯?
网友3:var的功能很鸡肋啊
当然也有网友称这个功能在其他语言那里早已得到了实现,并已被证实是优良的语言特性,Java使用者不必太过保守了,纠结会影响阅读代码。还有网友称,“我就不懂了 这些在C#里不是事的功能被java天天拿着吹”。
Java 10有多少人在使用?Java 8和Java 9你舍得抛弃吗?
2017 年Oracle宣布,Java 语言将每隔 6 个月提供一次更新,而Java 10作为首个大版本对于开发者的吸引力如何?JAXenter对于众多的Java用户进行了调查,并收到了近300个反馈。
根据反馈结果显示,大部分开发者(82%)还在使用Java 8,8%的用户在使用Java 9,还有7%的用户在使用Java 7。当然,这也并不能说明Java 9不好,毕竟一个新事物的出现总要给使用者留出足够的时间。OpenJDK董事会主席兼Oracle Java平台小组开发副总裁Georges Saab 曾表示:Java 9的增长速度虽然不如Java 8,但是与其他版本并无差异。
“你是否会抛弃Java 8或Java 9,奔向Java 10呢?”对此,很多网友也给出了自己的意见。Markus Eisele称,我已经使用了一段时间测试版了,我希望大家也能够尽快上手,毕竟发现bug也是一件造福开发者和社区的事情。大多数程序员的想法是个人项目会考虑迁移到Java 10上,但是客户和企业项目在短时间内不会迁移到Java 10上。