Java: 未来已来

Lombok vs Java Record:谁才是未来? 摘要: Java开发者常面临样板代码问题,Lombok通过注解自动生成代码显著提升效率,但依赖第三方库。Java 16引入的Record语法原生支持不可变数据对象,代码更简洁。对比显示,Lombok适合可变对象和复杂构建场景,而Record更适用于不可变数据载体。未来,随着JDK 17+普及,Record可能逐步取代Lombok的部分功能,但老项目可渐进迁移,新项目可优先使用Record。两者并非对立,可根据场景结合使用。 阅读详情

前言

在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功能的补强, 比如下划线变量等BiFunction<Integer, String, String> biss = (i, _) -> String.valueOf(i);, lambda参数的Shadowing,消除一些歧义等修补工作
  • JEP 305 Pattern Matching: 这个功能非常好,Scala和kotlin中的模式匹配非常强大,这个jep提供了类似的功能,配合switch和record,可以大大简化条件分支的处理,如:
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简化到家了:

record Point(int x, int y);
  • JEP 325 Switch Expressions (preview, JDK 12): 当前的switch是什么, 语句。这个jep扩展switch,并且可以作为表达式使用:
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类似:
String s = `

this is my

    embedded string

`;
  • JEP draft 8209434 Concise Method Bodies: 正常的方法定义以大括号包裹,这个特性提供了类似Lambda表达式简化方式的形式,直接单行定义方法体, 类似C#和kotlin的特性:
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中使用到这些美妙的特性。

Java:编程世界的常青树,未来仍大有可为 虽然 Java 面临着新兴语言的挑战,但它在编程世界中的核心地位并未被撼动。其成熟的生态系统、在企业级应用、安卓开发、大数据与分布式系统 等核心领域的不可替代性,以及在新兴技术融合方面的积极探索,都表明 Java 仍然是一门极具价值的编程语言,非常值得 Java 爱好者们深入学习和探索。 无论是对于想要进入编程领域的初学者,还是希望在现有基础上拓展技术栈的开发者,Java 都将为他们提供丰富的机遇和广阔的发展空间。 阅读详情

相关推荐

标题:Java 17新特性揭秘:与未来趋势共舞

学习教程(传送门)本人详解作者:王文峰,参加过 优快云 2020年度博客之星,《Java王大师王天师》公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯转载说明:务必注明来源(注明:作者:王文峰哦)标题:Java 17新特性揭秘:与未来趋势共舞学习教程(传送门)学习教程(传送门)往期文章学习教程(传送门)1、掌握入门到进阶知识(持续写作中……2、学会数据库用法(创作中……

王大师企业官方博客 2212

解决IDEA报错:Lambda expressions are not supported at language level‘6‘

原因:JDK版本为1.6,不支持Lambda表达式 解决:选择File → Project Structure → Project, 修改Level 到8 - Lambdas, type annotations etc. 如果没有解决问题,那么把Modules中也改为java 8 如果还没有解决问题, File --> Settings -->Build, Execution, Deployment Compiler --> Java Compiler,更改版本为Java 8.

石榴姐yyds 4177

基于Spring Boot框架的网上蛋糕销售系统

随着互联网的普及和电子商务的迅猛发展,网上购物已经成为人们日常生活的一部分。蛋糕作为一种受欢迎的食品,其销售市场也逐渐向网络化方向发展。网上蛋糕销售系统能够打破时间和地域的限制,让消费者随时随地浏览和购买蛋糕,同时也为蛋糕商家提供了一个展示和销售产品的平台。该系统的开发旨在提高蛋糕预定和销售的便捷性,节约时间和经济成本,并推动蛋糕市场的进一步发展。开发语言:Java,一种面向对象的编程语言,具有跨平台性、稳定性和安全性等特点,适用于构建大型、复杂的Web应用程序。 框架:Spring Boot,一个基于Sp

2301_81127431的博客 995

Lambda表达式

Lambda表达式 1.1体验Lambda表达式【理解】 案例需求 启动一个线程,在控制台输出一句话:多线程程序启动了 实现方式一 实现步骤 定义一个类MyRunnable实现Runnable接口,重写run()方法 创建MyRunnable类的对象 创建Thread类的对象,把MyRunnable的对象作为构造参数传递 启动线程 实现方式二 匿名内部类的方式改进 实...

zhujiachao的专栏 291

软件测试学习笔记(二)图覆盖

软件测试学习笔记(二)图覆盖 课程链接软件测试_中国大学MOOC 2.1 测试中的图 2.2 图覆盖准则 1、什么是图? 点的集合和边的集合。点或者结点,有穷非空的集合。边是点对。 2、图为什么在软件测试中具有重要地位? 所谓软件测试就是将软件变作一张图,然后覆盖它,不仅仅是软件,图更是计算机科学重要的结构。 3、软件测试中的图是如何得到的? 常见的图可以来自源代码,常见的是控制流图,还有各种各样...

DZFinder的博客 1420

Keil开发中CMSIS Driver API缺失问题的排查与解决

本文详细解析Keil开发中CMSIS Driver API缺失问题的根源与解决方案。针对版本不匹配、安装不完整等常见原因,提供在线与离线安装的对比及详细排查步骤,重点涵盖版本兼容性分析与项目配置验证,帮助开发者彻底解决API缺失错误并预防问题复发。

rust6ferris的博客 550

java大括号转义_Java: 未来已来

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

weixin_39732609的博客 726

VSCode+PlatformIO新建工程卡成狗?3步提速大法实测有效(附镜像源配置)

针对VSCode+PlatformIO新建工程时因依赖下载缓慢导致的加载慢问题,本文提供了三步核心提速方案。通过配置Python环境变量、修改PlatformIO插件设置以使用国内镜像源,并优化pip配置文件,实测可大幅缩短工程创建时间,有效解决创建工程卡顿的痛点。

delta的博客 707

java面向对象初探(1)

1、instanceof用法 instanceof前面的操作数类型和后面的类需要满足以下三个条件:相同;子类;父类。 强制类型转换,只有存在父子类关系,或者由子类转换为object类的时候,才是允许的。PS,String s=null; s instanceof String,这个语句将会返回false,因为s并没有真正引用一个真正的对象。 2、java构造器和方法的关系,相当于鸭嘴兽和动物的关系。

u014257192的专栏 287

SAP PS项目结算实操:从CJ20N到CJ88,手把手搞定项目成本结转与凭证生成

本文详细解析SAP PS项目结算全流程,从CJ20N到CJ88的操作要点,涵盖成本归集、结算规则配置、结果分析及凭证生成等关键环节。特别针对FICO模块中的项目凭证流转问题提供实战解决方案,帮助财务人员规避常见配置错误,提升项目结算效率与准确性。

weixin_26833503的博客 811

深度探索:机器学习中的Label Propagation算法(基于图论的半监督学习方法)原理及其应用

Label Propagation算法作为一种基于图论的半监督学习方法,有效地利用了数据的内在结构和未标注样本信息,降低了对标注数据的依赖。尽管存在对初始标签敏感、易陷入局部最优等局限性,但在图像分类、社交网络分析、生物信息学等领域展现了良好的应用前景。未来的研究方向可能包括:探索更稳健的标签初始化策略、设计抗噪声和异常值的相似度计算方法、结合深度学习模型提升模型表示能力等。随着半监督学习理论和技术的不断发展,Label Propagation及其变种算法将在更大范围内推动机器学习在标注数据有限情况下的应用

qq_51320133的博客 2279

Java发展的未来和趋势

微服务和云原生应用程序需要高性能、可伸缩性和安全性,Java 在这方面具有非常好的优势,它的类库和框架可以很好地支持微服务和云原生应用程序的开发和维护。Kotlin 具有很好的跨平台特性,可以在不同的操作系统上运行,并且具有很好的性能和安全性。Java 的跨平台性和安全性非常适合区块链和加密货币应用场景,同时,Java 的开发人员和安全专家也可以为这些应用程序提供很好的支持。总的来说,Java 作为一种广泛应用的编程语言,将会在未来的发展中继续发挥重要的作用,并且会伴随着新技术和框架的不断涌现。

penggerhe的博客 951

毕设分享|基于16单片机的指纹识别电子密码锁设计

我们今天的工作生活中,很多的场合都需要身份的认证,而传统的基于标志的身份认证技术由于受到证件伪造以及密码破解等手段的威胁,逐渐表现得有些力不从心。怎样保护自己的重要文件资料,如何保证自己的隐私不被泄露?在传统的身份认证中,我们往往使用密码加密法,但是这种方法只是"防君子不防小人"。在高明的黑客眼里,由几个字符组成的密码脆弱得不堪一击。现在,科技的发展让我们有了新的选择——生物识别技术。将生物识别技术应用于笔记本、门锁等方面,可以对文件、财产起保护作用,并且可以进行身份识别。

Sen_091的博客 1019

Java:未来已来

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

java1856905的博客 264

【Matlab】从零开始掌握 MATLAB 安装激活:从环境搭建到问题解决全指南

打开 MATLAB,点击 “主页 - 设置路径”;点击 “添加文件夹”,选择自定义的工作文件夹,点击 “保存”,重启 MATLAB 生效。MATLAB R2024a 的安装与激活是开启 MATLAB 学习的第一步,也是构建稳定学习环境的基础。本文从安装前准备、分步操作、验证测试、问题解决到环境优化,完整覆盖了新手所需的所有知识点 —— 核心要点在于:确认系统兼容、使用合法授权、选择纯英文安装路径、完成功能验证。

unber的博客 596

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Java:未来以来

今天看到一篇很有含金量的博文 https://toutiao.io/posts/9kd2k9 现在分享给大家 在10月22的 Oracle Codeone大会上,Java平台的首席架构师 Mark Reinhold 做了The Future of Java is Today的演讲, 回顾了最近Java的几个版本的新的功能,Java的每年两次的发布周期, 澄清了关于发布流程和Java版本的几个误区,...

Ccccyxji的博客 470

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

java知音_Java : 未来已来

来源:@colobu ,colobu.com/2018/10/24/the-future-of-java-is-today/在10月22的 Oracle Codeone大会上,Java 平台的首席架构师 Mark Reinhold 做了The Future of Java is Today的演讲, 回顾了最近 Java 的几个版本的新的功能,Java 的每年两次的发布周期, 澄清了关于发布流程和 ...

weixin_35996612的博客 233

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

valhalla java_Java:未来已来-Fun言

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

weixin_40006265的博客 1062

探秘Valhalla:Java的未来之门

探秘Valhalla:Java的未来之门 是OpenJDK的一个重要项目,它致力于为Java编程语言带来一系列深度改进,旨在提升性能、优化内存管理和提高代码的可读性。这个项目的目的是让Java开发者能够利用更高效的数据结构和编程模式,以应对现代计算环境的挑战。 项目简介 Valhalla项目的主要目标是引入两种核心特性: Value Types(值类型):这是对现有的Java对象模型的一种扩展,...

gitblog_00071的博客 1246

java在未来_Java: 未来已来

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

weixin_34440189的博客 152

Quarkus:轻量级 Java 的未来?

作为一名有着 8 年 Java 开发经验的 “老兵”,我见证了 Java 生态的蓬勃发展与不断变革。从传统的 Spring 框架到如今的微服务、云原生时代,Java 始终在适应新的技术浪潮。而在这其中,Quarkus 的出现,让我眼前一亮,不禁思考:它会是轻量级 Java 的未来吗?

Minoz_wl的博客 1612

Java与人工智能:共创未来

Java作为一种面向对象的编程语言,具有跨平台、高性能、可扩展性和安全性等优点。随着技术的不断进步和应用的深入发展,Java与人工智能的结合将会更加紧密。

2301_78863619的博客 2621
上一篇: 技术面试中的精英主义
下一篇: 【面试题】2019年最全Java面试通关秘籍汇总集!
我是小泽呀!
博客等级 码龄7年 119粉丝 67原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值