关注本文评论提供java学习
大家好!虽然我们都在谈论Java 9,但有些人还没有在他们的项目中采用Java 8,但是新的Java版本JDK 10现在可以在Oracle网站上下载。这是新发布时间表的第一个版本,每六个月你就有一个新的Java版本。我知道这很早,但现在已经成为现实。除了六个月的发布之外,每三年还会有一个LTS版本,这是一个主要的Java版本。下一个LTS版本是Java 11,它将在9月份发布。
尽管JDK 10的出现非常迅速,但还是会有一些有趣的功能。我还没有详细介绍它们的所有细节,但表面看来,它们对我来说看起来很有用和有趣。
以下是关于这些功能的简短说明。
1.局部变量类型推断(JEP 286)
与JavaScript,Kotlin和Scala类似,现在Java也会有一个var关键字,它允许您声明一个局部变量而不指定其类型。类型将从上下文中推断出来。例如,当你说
var name = "Java"
,编译器已经知道类型是String。
我不知道这会是多么有用,因为我非常习惯于看到
int i =0
或者
String name = "Java"
, 并且我喜欢变量声明行中的类型信息,但是看起来Java正在按照Scala和Kotlin的方式并尝试合并从那里改变。
另请注意,var关键字只能用于局部变量,即方法或代码块内的变量 - 不能将其用于类体内的成员变量声明。
最后,它不会使Java成为像Python这样的动态类型语言。Java仍然是一种静态类型的语言,一旦类型被分配,你就不能改变它。例如,
var name = "Java"
确定,但
name = 3;
不是好的。
正如Sander Mak在他的Pluarlsight课程中介绍的Java 10中的新功能,这是Java 10中最引人注目的功能之一。它减少了在Java中声明局部变量所需的样板代码数量。
这个简单的例子并不是那么明显,但考虑一个方法返回一个复杂的列表类型的位置,需要大量的尖括号和泛型来声明类型。这确实可以节省时间:
varlist=List.of(1, 2.0, "3")
在这里,列表将被推断为List >,这是一个交集类型。
2.基于时间的版本控制(JEP 322)
随着JDK 10的发布,Java每六个月就采用一个新版本的节奏。对于这是否是一种实用的方法存在很多争议。许多人都说,每六个月就能获得一些新功能是很好的,但很多人抱怨说,现在只有很少的时间来采用JDK。
无论如何,这将是前进的方向,每三年LTS发布被认为是主要版本。
此外,更新元素将在Feature元素递增一个月后递增,因此2018年4月Java版本将为JDK 10.0.1,2018年7月发布将命名为JDK 10.0.2,依此类推。
3.垃圾收集器接口(JEP 304)
这是更有趣和有用的Java 10功能之一。它增加了不同垃圾收集器的代码隔离并为它们引入了一个干净的界面。
这意味着从JDK版本中排除GC更容易,同时还可以在不影响代码库的情况下添加新的GC,从而更加轻松。您可以进一步了解Java内存管理,以了解有关G1垃圾收集以及G1与并发标记扫描垃圾收集器之间差异的更多信息。
4.用于G1的并行完整GC(JEP 307)
这是另一个有趣的功能,通过完整的GC并行来改善G1最坏情况下的延迟。
如果您还记得Java 9的发布版本,那么G1就成为JVM的默认GC,其目的是为了避免完整的GC。但是当并发集合无法快速回收内存时,它最终会回落到完整的GC上,这会产生问题。
此更改将并行处理完整的GC算法,以便在G1 Full GC发生不太可能的情况下,可以使用与并发集合中相同数量的线程来提高整体性能。
5.备用内存设备上的堆分配(JEP 316)
这听起来像一个非常酷的功能。它使HotSpot VM能够在由用户指定的备用内存设备上分配Java对象堆。
例如,此功能可以分配较低优先级的进程来使用NV-DIMM内存,而只是在多JVM环境中将更高优先级的进程分配给DRAM。
6.将JDK森林合并到单个存储库(JEP 296)
这个新的Java 10功能全部关于内务管理。它将将JDK森林的众多存储库合并到一个存储库中。
7.根证书(JEP 319)
这是Java 10带来的另一个重要变化。如果您还记得,JDK 10是在与OpenJDK密切合作的情况下创建的,而且这一功能很明显。
它将提供一组默认的根证书颁发机构,使OpenJDK对开发人员更具吸引力。
它还旨在减少OpenJDK和Oracle JDK构建之间的差异。在OpenJDK构建中,默认情况下,关键安全组件(如TLS)现在将工作
8.实验性的基于Java的JIT编译器(JEP 317)
这是另一个有趣的特性,它使基于Java的JIT编译器Graal能够在Linux / x64平台上用作实验JIT编译器。
如果您还记得,Graal已经在Java 9中加入了,但是现在您可以使用以下JVM参数启用它:
-XX:+UnlockExperimentalVMOptions -XX:+UseJVMCICompiler
如果你不知道Graal,它是一个新的基于Java的JIT编译器,它是实验性的AOT(AOT)编译器的基础。
但是请记住,它处于试验阶段,您不应该将它用于生产。
9.线程局部握手(JEP 312)
这个Java 10特性为改进虚拟机性能奠定了基础,使得可以在不执行全局虚拟机保存点的情况下对应用程序线程执行回调。这意味着JVM可以停止单独的线程,而不仅仅是所有的线程。
作为此功能或JEP 312的一部分,可以改进虚拟机性能,例如,已经从JVM中移除了一些内存屏障,并且通过仅停止单个线程来撤销偏移,从而改善了偏置锁定。
10.删除Native-Header Generation Tool(JEP 313)
这是另一个专注于家务管理的Java 10功能。它将从JDK中删除javah工具,这是一个单独的工具,用于在编译JNI代码时生成头文件,因为这可以通过javac来完成。
关注本文评论提供java学习
领取专属 10元无门槛券
私享最新 技术干货