我要报名
您的位置: 首页 > 校园动态  > 行业新闻

Java语言的2018展望,你在期待什么

来源:  |  发布时间:2018-09-29  |  浏览量:404

timguuJ03RXOSZ在过去的2017,目前已在java世界许多前所未有的变化,部分原因是由于java 9的推出,虽然它已经被推迟了将近一年。

然而,随着时间的推移,人们可能会发现,对java 9推出的意义远不改变的发布周期,每六个月java的意义。在java版本的发布周期的变化就意味着两个新的java版本将推出2018,没有一个。

第一个新版本,将在2018被称为java 10,和第二新版本java 11。虽然这种命名方案与现有名称只有在新版本之后才出现,但没有什么区别,主要的公开辩论和最终协议将要启动。

考虑到新版本的推出,将这种严格的时间节奏,预计这将使每一个新版本比目前所见到的发布java功能。至于java 10而言,这意味着新的功能的数量是相当小的。

InfoQ曾报道在java 10的主要特点,并就以后再说。此后,这个版本附加功能只有轻微的(额外的Unicode扩展),清洗性能(去掉头部生成工具,本地CA根证书提供了默认的)、实验(java JIT编译器基于格拉尔),或是小众的性质(异构存储架构的支持)。

对于java 11考虑什么功能现在更云山雾罩。我们只能确认以下功能是被考虑的:

ε。零垃圾回收算法的参考实现。

动态类文件常量。一个主要的软件库,作家平台的特点和先进的开发动态特征使用invokedynamic。

运行时跟踪JIT编译事件。

一旦发布日期临近,功能列表肯定会被填满。然而,值得注意的是,java的值类型没有在列表中所提到的。这并不奇怪,因为实现的价值类型需要的java语言和运行作出了重大的修改,和java类型系统的完全重构,包括仿制药。

虽然目前的原型已经工作,但还有很长的路要走。目前的状态是只适用于底层平台的开发,以及开发人员习惯使用反射或methodhandle工具。这似乎令人难以置信,尽管价值类型将作为java 11部分发布,甲骨文尚未发表任何评论当特征预计将公布。

然而,如果值类型不提供的java 11部分,这将产生连锁反应。第一个包含值类型的长支持(LTS)版本将在2021年9月之前发布。

在写这篇文章的时候,我们不知道在类的数据已经提出(数据类)特征将出现在java 11。作为java语言的建筑师Brian Goetz介绍:

数据类将用于解决类表示和API契约之间的复杂间接关系。通过使用数据类,编译器可以填充一些普通的类成员。

数据类的建议与Scala的case类有一些相似之处。但Goetz明确指出,仍有在数据类的设计空间的一些可能的变化。这个特性的整体语义比我们现在看到的更深。当前数据类概念与开发过程中模式匹配特性的深度相关联。但是,这两个特性可以以不同的版本提供。

关于上面的两个特性,将来可能改进开关的形式。切换语句块将用作表达式或声明。

这个功能是比较小的,预计将在java 11交付,即使数据类型或模式匹配特性尚未实现。但在目前的情况下,特征仍然是JEP草案。

最终版本将于九月发布,完成日期为2018年6月。所以,我们要等几个月前的java 11的整体形状是从水。

回到java 10,其新特性还证实,因此它可能增加显着的变化,从现在到GA。无论如何,在这四个月,开发商可以期待一些新的功能被添加到java 10。

增强的新功能通常是通过java增强过程跟踪(JEP)或java程序社区标准要求(规范)。因为java 10的时间短,范围比较小,java 10的变化将通过跟踪调节。

这将包括在java 10的特点是那些已经在有针对性的提出的状态,包括:

286:局部变量类型推断

296:统一的JDK的仓库

304:垃圾收集器接口

并行全GC 307:G1

310:应用程序类数据共享

312:ThreadLocal握手机制

JEP 296是一个纯粹的清理和JEP 304加强不同垃圾收集器的代码分离了更简洁的界面,垃圾收集器。

JEP 304意味着制造商可以更自由地选择特定的GC算法构建JDK,因为现在有很多种胃癌的发展,如谢南多厄、中关村和ε,可用于未来。该社区还试图放弃或甚至删除并发Mark Sweep(CMS)垃圾收集器,但目前没有可用的替代方案。

一个更有趣的变化可以调节286,和一个增强的局部变量的类型推断可以让开发商将许多变量声明模板代码。也就是说,在下一个版本中,下面的变量声明是合法的:

var list = new ArrayList(); // infers ArrayListvar stream = list.stream(); // infers Stream

此语法仅限于初始化的本地变量和for循环中的本地变量。

它实际上是一个语法糖,它不会在语义上发生变化。然而,这种特征可能导致一场激烈的辩论在java开发人员。其他三个变化将对性能产生一些影响。

JEP 307解决了一个问题,在G1垃圾回收器- java 9,和G1的GC是一个单线程算法。也就是说,当完全GC发生时,G1会严重影响性能。JEP 307的目的是利用并行GC算法,多线程可以并行恢复时GC。

JEP 310扩展类数据共享(CD)。JVM可以将一些类记录到共享的压缩文件中,并在JVM下次启动时将文件映射到JVM进程,从而减少启动时间。这个文件也可以在多个JVM中共享,当多个JVM在同一台机器上运行时,这可以减少内存占用。

这个函数在java 5的存在,而是由java 9年底,函数只允许引导类加载器加载压缩类。310卷的目的是延长功能,和自定义的类装载器的应用也可以加载压缩类。此功能仅在Oracle的JDK是目前可用的,和OpenJDK不包含此功能。

JEP计划迁移的特征从Oracle的私人仓库,公共仓库。从java 10,常规版(非LTS)将使用OpenJDK的二进制包后。这表明,用户使用此功能,所以它必须支持OpenJDK以及。

JEP 312的目的是提高虚拟机的性能。调用回调函数在应用程序线程不再需要进行全局的虚拟机安全点的操作,这意味着JVM可以停止单线程。一些小的改进包括:

减少堆栈跟踪采样的影响(例如,剖析)。

减少信号依赖以获得更好的堆栈采样。

通过停止单独的线程来改进偏置锁。

JVM中已经删除了一些内存障碍。

作为一个整体,java 10似乎不包括主要的新功能或性能的改进。这是可以理解的,毕竟,这是新版本周期的第一个版本。


  • java软件工程师
  • UI设计师