Java: 未来已来

前言:在10月22的 Oracle Codeone大会上,Java平台的首席架构师 Mark Reinhold 做了The Future of Java is Today的演讲, 回顾了最近Java的几个版本的新的功能,Java的每年两次的发布周期, 澄清了关于发布流程和Java版本的几个误区,最后花了很大的篇幅介绍了未来Java几个令人非常期待的几个孵化中项目,可以为Java带来更好的生产力、性能和可扩展性。我整理了这四个项目相关的知识,你可以提前了解到Java未来的这些酷炫的特性。

Java各版本的发布时间点和LTS版本

Mark Reinhold 我不多介绍了, 之前要了解Java的未来动向看Java之父James Gosling, 他离开Oracle之后想了解Java的动向就看 Mark Reinhold。

Project Amber

提供面向生产力的Java特性, 比如字符串字面值、switch表达式、模式匹配、record等

这个项目包含很多Java语言特性的新功能。

包括:

正在实现的:

JEP 302 Lambda Leftovers: 对lambda功能的补强, 比如下划线变量等BiFunctionbiss = (i, _) -> String.valueOf(i);, lambda参数的Shadowing,消除一些歧义等修补工作

JEP 305 Pattern Matching: 这个功能非常好,Scala和kotlin中的模式匹配非常强大,这个jep提供了类似的功能,配合switch和record,可以大大简化条件分支的处理,如:

1
2
3
4
5
6
7
8
9
int eval(Node n) {
switch(n) {
case IntNode(int i): return i;
case NegNode(Node n): return -eval(n);
case AddNode(Node left, Node right): return eval(left) + eval(right);
case MulNode(Node left, Node right): return eval(left) * eval(right);
default: throw new IllegalStateException(n);
};

数据类,一行定义,省去了字段、字段访问方法和hash、equals、toString等方法,定义ValueObject简化到家了:

1
record Point(int x, int y);

JEP 325 Switch Expressions (preview, JDK 12): 当前的switch是什么, 语句。这个jep扩展switch,并且可以作为表达式使用:

1
2
3
4
5
6
int numLetters = switch (day) {
case MONDAY, FRIDAY, SUNDAY -> 6;
case TUESDAY -> 7;
case THURSDAY, SATURDAY -> 8;
case WEDNESDAY -> 9;
};

JEP 326 Raw String Literals (preview, JDK 12): 这个很多语言中都实现了,可以更好的书写字符串字面值, 尤其在正则表达式中处理很多转义符的时候,和Go类似:

1
2
3
4
String s = <br/>this is my<br/>embedded string<br/>;

JEP draft 8209434 Concise Method Bodies: 正常的方法定义以大括号包裹,这个特性提供了类似Lambda表达式简化方式的形式,直接单行定义方法体, 类似C#和kotlin的特性:

1
2
3
4
5
6
7
class MyList<T> implements List<T> {
private List<T> aList;
public int size() = aList::size;
public T get(int index) = aList::get;
...
}

已发布的:

JEP 286 Local-Variable Type Inference (var) (JDK 10): 本地变量的类型推断, 也就是使用var定义变量,有些同学已经用起来了,非常的方便,有点类似动态类型的语言,感觉虽然还没有达到Scala那么灵活,已经很不错了

JEP 323 Local-Variable Syntax for Lambda Parameters (JDK 11): 对本地变量的类型推断的加强,用在Lambda表达式中。

暂时搁置的:

JEP 301 Enhanced Enums.

总之,每一个特性都可以大大简化我们的开发,让Java更像一个"现代的"编程语言。

Project Loom

提供一个轻量级的用户态的纤程,叫做fiber,更加简化并发编程,而且更有效

Mark Reinhold 首先使用jshell演示了fiber的使用,一两行程序就可以做到,我觉得方便性可以和goroutine相媲美了。他接着使用一个restful的例子比较了Thread和Fiber的性能, restful服务收到请求后暂停100毫秒,模拟一个慢的io操作,结果显示Thread很很多几百毫秒的尖峰,而fiber在预热之后一直稳定在100毫秒。 这绝对是Java程序员值的关注一个新特性。

例子使用jetty做服务器,线程池执行命令的时候让fiber去调度,这种方式对现有的代码改动很小。

我比较关注的是如果它的内部调度算法怎么实现的,另外,一个包含复杂业务完成时间较长的fiber是否能被调度器自动调度,以便使用有限的线程调度其它的fiber, 类似goroutine在系统调用的时候自动插入检查点。

Project Panama

提升JVM和外部(非java)代码和数据联系

当然,这个项目不仅仅是简化JNI的开发,而且提供了很多的特性:

native function calling from JVM (C, C++), specifically per JEP 191

native data access from JVM or inside JVM heap

new data layouts in JVM heap

native metadata definition for JVM

header file API extraction tools (see below)

native library management APIs

native-oriented interpreter and runtime “hooks”

class and method resolution “hooks”

native-oriented JIT optimizations

tooling or wrapper interposition for safety

exploratory work with difficult-to-integrate native libraries

Mark Reinhold在演讲中举了两个例子,首先是为 POSIX 操作系统 API 的头文件unistd.h中的函数生成Java的可访问代码。

jextract工具会生成一堆的函数和类型,关键这些是从c的头文件中自动生成的,你不必费劲心思去自己设计类型和方法了。这一点比Go语言中的CGO要方便多了,快捷度可以和C#互操作性相媲美。

所以以后你要是想从Java中访问C的链接库,可以使用jextract一步生成,


调用方法也很方便。

另一个例子是调用C标准库time.h中的clock_gettime函数,它的参数需要struct类型,使用上面相同的手段可以生成访问类:

当然这两个例子只演示了这个项目的一个功能,更多的功能我们可以持续关注。

Project Valhalla

包含两个feature: 值类型和基本类型的泛型。

值类型:提供不可变类型和非引用类型的支持。不可变类型在Scala中很常用,java中也会引进这中类型。使用这种类型有很多好处,一个就是可以显著地提高性能,因为数据不可变,你也不必担心同步更新的问题。

基本类型的泛型: 为primitive type提供泛型的支持,不必再进行装箱开箱操作。

Mark Reinhold用一个复数矩阵相乘的例子来测试,测试工具使用JMH。

首先是正常的public class Complex {...}类,然后改成值类型public value class Complex{...}再次测试,结果显示,

正常测试花费3.6秒内存分配3.7G;值类型则只需要0.3秒花费3.8M左右,效果惊人!

目前这些特性还在开发之中,Mark Reinhold用java12 + 这些项目已经能跑一些例子了,我们可以期待不远的将来能在Java中使用到这些美妙的特性。

原文地址:http://blog.51cto.com/13952975/2347601

时间: 2024-08-29 12:03:32

Java: 未来已来的相关文章

Java并未走远,未来已来

在上一次 JavaOne 大会之后,首届 Oracle CodeOne 大会最近于美国旧金山举行.周一晚上主旨演讲的头条是"Java:未来已来(The Future of Java Is Today)",其中包括:新的每半年发布一次的 Java/JDK 的发布节奏正按计划进行:Oracle 和许多其他组织将继续支持 Java 并为之做出贡献:有几个新的 OpenJDK 项目在探索提高生产力的语言功能,比如,原始字符串字面量(raw String literals).纤程(fiber)和

Java TM 已被阻止,因为它已过时需要更新的解决方法

公司的堡垒机需要通过浏览器登陆,且该堡垒机的网站需要Java的支持,最近通过浏览器登陆之后总是提示"java TM 已被阻止,因为它已过时需要更新的解决方法"导致登陆之后不能操作, 但是操作系统中确实已经安装了比较新的JDK,安装的JDK版本是jdk-7u67-windows-i586,因为太烦人,所以决定搞清楚报错的原因,一劳永逸,彻底解决这个问题 准备工作:安装JDK,安装版本jdk-7u67-windows-i586.exe,因为机器的Eclipse还依赖64位的JDK,所以另安

未来已来&mdash;&mdash;工作空间 WorkSpace 和物联网 IoT (1)

不久前写的一篇Blog,从Citrix展望未来的视频引发的感慨,未来已来.这个感慨不是空穴来风,是因为在今年的峰会上看到不少新的进展.比如,IoT. Citrix 收购IoT平台公司Octoblu已有不短的时间,从公布这个消息开始,我就赶紧上去注册了个账号,然后,就埋头于日常的扫地工作了--时光荏苒,Octoblu并未裹足不前,在今年的峰会上,罕见的出现了不少IoT专门的Session,让我很是兴奋. 怎么说呢,让我感觉这么好的一个东东,"养在深闺无人识"~ 打开Octoblu的网站,

2星|《大势将至,未来已来》:古龙体散文,内容是中产感兴趣的房子车子移民等

大势将至,未来已来 看内容是一些散文的文集,体裁上类似古龙的一句话一段的,公众号文章也经常看到这样作的,有人称作“大喘气体”. 文章的内容,基本是中产关注的房子车子移民之类,有些是真实发生的新闻事件,作者依据公开的资料作了改写,有些则真假未知. 作者以前做过调查记者,但书中的内容貌似都不是调查后的结论. 总体评价2星,价值不大. 以下是书中一些内容的摘抄: 1:2011年冬日,罗兆辉似乎迎来转运.传闻,他早年得意时结交了一位富豪朋友,并赠送其一幅字画.那年冬天,富豪将字画归还,罗兆辉最终将其卖出

微软宣布加入 OpenJDK,打不过就改变 Java 未来!

近日,微软的 Bruno Borges 在 OpenJDK 邮件列表中发布了一条消息,内容包含接下来发生的事情以及微软如何开始将其团队整合到 OpenJDK 社区. 在邮件中,Bruno Borges 提到,微软已正式签署<Oracle 贡献者协议>.同时,他重申了微软对 Java 的承诺,以及微软团队对回馈 Java 社区的期待. Borges 曾经是 Oracle 开发人员,现在担任微软 Java 的首席产品经理.他向大家介绍了 Java 工程团队负责人 Martijn Verburg,V

JAVA未来前景还能持续多久

信息时代到来了,在这个时代里,每个人都在"八仙过海,各显其能", 平凡的,享受现状,风清云淡的过着每一天,有能力的,则日子过的生声水起,但有个前提,就是要有自己的特长,比如你文笔好,可以当文案:你点子多,可以做策划等等,有人擅长多项技能,如果你现在做不到,那就最好先精通一项.2018年,如果你不知道学什么技能好,不如来看看JAVA开发. 有很多人一直在说JAVA现在已经饱和了,已经没有必要学Java,程序员已经是严重过剩,行业人才竞争状况更是恶性的之类的云云.现实真是这样嘛? Java

2019年Java未来的发展方向

2018即将结束,迎来2019年,Java作为世界上 最流行的计算机编程语言,在当今信息时代中发挥了重要的作用.Java语言本身具有着自己独特的优势:面向对象.分布式应用并且安全.多线程.跨平台等.这使得Java语言成为许多应用系统理想开发语言. 不管是手机应用程序还是电脑程序,你在生活中每一次购物到每一笔支付成功,都离不开Java,越来越多的公司也正在采用Java语言开发网站,在所有程序员当中做Java开发的工程师比例相当高的,通常来说,具备3到5年开发经经验的Java工程师,年薪20万元是很

Java 12 发布了,决定Java未来的三大主要项目!

Java 12 发布了,没有引起很大的讨论.对于 Java 这样一门成熟的语言来说,每一次更新似乎都无法满足庞大的 Java 开发群体与生态圈.再加上 Oracle 对 Java 耐人寻味的态度,Java 的未来会如何?Java 的变化速度从未如此之快--如今,该语言的新版本每六个月就会发布一次. 而之所以能够实现如此重大的转变,自然离不开一系列专注于提高其性能与添加新功能的协作性项目的贡献.这些项目的目标可谓雄心勃勃.正如 JetBrains 开发者布道师 Trisha Gee 在 QCon

未来已来&mdash;&mdash;工作空间 WorkSpace 和物联网 IoT (2)

光说不练假把式.上一篇介绍了Octoblu这个好玩的IoT平台,可是光放一些截图,没啥意义.好不好玩,容不容易上手,那得搞个Demo~ 说实话,虽然我的账号注册了辣木久,一直没正经玩过Octoblu,直到这次从美国回来-- 以前我也没想到工作空间和物联网啥关系,直到今年见识了900+的PM 2.5-- 于是,我就想,这两者有啥关系呢?既然现在能够实现随时随地的灵活工作空间,能不能结合物联网的特点,让工作空间变得自动而有趣呢?比如,像展望未来的那个视频-- 那就搞搞吧~ 我最初的想法,是由PM 2