写点什么

云原生时代,Java 会走向末路吗?

  • 2023-04-18
    北京
  • 本文字数:2664 字

    阅读完需:约 9 分钟

云原生时代,Java会走向末路吗?

唱衰 Java 的声音由来已久。


尤其是近几年,云原生时代的到来,软件的交付方式发生了根本性变化,Java 遭受了诸多质疑。

传统领域的 Java 开发,交付的是 Java 应用本身,具体体现在以 “jar”“war” 的形式交付,而云原生最佳实践,则是基于微服务形式,以容器为基本交付单位,并在 K8S 中编排。云原生应用要求更快速地启动、强调资源按量消费,弹性扩展,以及可观测性等。就这一层面而言,在云原生时代,Java 的缺陷确实是天然存在的。


“事实上,Java 技术在云原生时代也在不停地进化。” 面对唱衰 Java 的诸多论调,龙蜥社区 Java 语言和虚拟机 SIG 成员、龙蜥社区 RISC-V SIG 成员、阿里云程序语言与编译器团队负责人、Java Champion 李三红选择理性看待。


“比如更多支持容器部署的特性已经加入到 OpenJDK 版本。一直被人诟病的 Java 启动慢的问题,目前基于 OpenJDK 技术的几个创新项目正在多个不同方向探索,包括 CRaC (Coordinated Restore at Checkpoint) 、Leyden,以及由阿里和 Google 作为主要贡献者的 Fast Startup Incubator 等项目。在资源弹性使用方面,由 Alibaba Dragonwell 提供的 ElasticHeap 功能,主要目的是解决云计算环境下 Java 内存资源使用的弹性问题。最后,OpenJDK 的 JFR 以及 JFR Streaming 技术为构建 Java 云原生可观测工具提供了重要的技术支撑。”

 

Java 面临的挑战,不仅仅是云原生。


李三红认为,从 1995 年 Java 1.0 发布算起, Java 技术这二十多年的发展,大致存在一明一暗两条线的驱动。“一条暗线,是指 Java 或者说支撑 Java 的底层 JVM 技术适配计算机架构的演进与发展。一条明线,是指 Java 作为一个开发者工具,本质是要面向业务领域解决业务问题的,所以自然而然地推动了 Java 在云原生,AI 等方向的演进,解决这些领域内碰到的问题与挑战。”


后摩尔时代,算力增长放缓,更多利用多核、SIMD(单指令多数据流)等并行计算技术,以及异构来释放更大的算力。相较于 C/C++ 这些传统编译型语言,Java 处在软件栈的更高抽象级别,自带 Java 标准库,以及运行时环境,这也给 Java 创新带来了更多的空间以及可能性。


李三红指出, Java 在多核、异构加速领域做了多方面的探索,适应与优化。比如,OpenJDK 孵化的 Vector API 项目,依赖 CPU 的 SIMD 指令,获得计算性能的成倍提升。即将发布的 OpenJDK 19 引入了 Virtual Threads (Preview),旨在帮助 Java 开发者高效处理并发 (尤其针对 IO 密集型场景) 。而在异构领域,早 2014 年 JVM 技术峰会,AMD 就分享了 Sumatra 项目,尝试实现 JVM 与 Heterogeneous System Architecture 目标硬件交互。由 The University of Manchester 发起的 TornadoVM 项目,目标是帮助 Java 开发者不需要了解 GPU 编程语言或者相关的 GPU 体系结构知识就可以编写面向异构的并行程序。


在 AI 方向上,Java 也在与时俱进。据李三红介绍,在企业计算领域,Java 是被使用最多的语言之一,但对于机器学习领域的开发,Java 一直缺乏标准支持,这个方向其实在 JCP-EC 讨论也比较多。

基于 Java SE 技术,在 JCP 流程内推动并最终在 2022 年定稿的 JSR 381 规范,其目标就是为不同领域的 Java 机器学习开发提供通用的可重用设计。JSR 381 定义了标准的 Java API,提供了基本机器学习、图像分类和对象识别方面的处理能力。“依赖于不同的机器学习平台,如 TensorFlow、MXNet 以及 DeepNett 等,JSR-381 提供了不同的实现。对于 Java 生态内的开发者来说,不必再去学习 Python, 可以依赖 JSR-381 VisRec API 去构建你的 AI 应用。”


现实中,Java 应用的版本升级是较为缓慢的。Java 11 (OpenJDK11)距离 2018 年发布已经过去四年多,目前国内大多数的用户仍然停留在 Java 8。李三红认为,动力不足是多方面的,对开发者来说最直接的原因可能是担心升级后兼容性带来的稳定性问题,会直接影响业务的连续性。


这种问题并不罕见。令人振奋的是,处于 Java 生态中的企业正在贡献自己的力量。阿里内部在大规模地往 Java 11、 Java 17 迁移的时候,总结了不少的经验,并且将这些经验通过工具的方式沉淀下来。最后阿里开源了 EMT4J (Eclipse Migration Toolkit for Java) ,能够帮助 Java 应用无缝升级最新版本 JDK, 主要支持从 Java 8 到 Java 11,以及 17 的升级。


李三红还补充道,对于 Java 版本的升级问题,还可以从另一个角度 ——Software Sustainability 来进一步探讨。


“由 Titus Winter 等编写的《Software Engineering at Google - Lessons Learned from Programming Over Time》一书中,谈到了组织的 Codebase Sustainability 概念,强调了两个核心理念:第一,无论应对的是技术需求,还是业务需求,软件代码应当可以做一切应该做的改变。第二,这些改变带来的影响是安全的


“回到 Java 版本升级这个问题,我们在开发 Java 应用的时候,建议应用架构师们把 Java 版本升级纳入到 Software Sustainability 这个维度下考量,对代码开发规范进行相关的约束。例如,不要让你的代码依赖 JDK 内部不公开的 API,不要让你的实现依赖特定的 JDK 版本行为,不要使用被 Deprecated 的 API 等等。架构的目标应当考虑 Code Sustainability,让你的 Java 应用可以在任何时候根据实际需要平滑升级到不同 JDK 版本,不应当因为代码缺乏 Sustainability 而导致的尽量少的版本升级。”


李三红对 Java 的未来充满信心,源于他在 JVM 领域耕耘多年,不仅深入了解 Java 特性,并且有能力进行创新性研究。


在加入阿里之前,李三红一直在 IBM Java 技术中心,参与 J9 虚拟机开发,期间领导了 JVM 多租户项目。目前就职于阿里云,领导程序语言与编译器团队,主要的工作是结合阿里、蚂蚁及云上各业务的需求,在编译器、语言运行时等基础领域进行研究创新。编程语言是基础软件的核心,也是龙蜥技术生态的八大方向之一,Dragonwell 是龙蜥社区 Java 语言和虚拟机 SIG 下的项目。目前,在语言工具链这块,已经形成 Alibaba Dragonwell (Java 生态),Alibaba Cloud Compiler (C++ 生态) 等多个产品来支撑其业务,语言工具链相关的开源技术也在为龙蜥社区的开发者提供支持


2020 年,李三红获得了 Java 技术领导者社区 Java Champions 推荐,被授予 Java Champion 荣誉。Java Champion 由 Java 社区成员提名,并且必须得到现有 Java Champions 成员的一致同意。唯有为 Java / JVM 生态系统做出重要贡献的专家才能获此荣誉。


去年,龙蜥社区理事长单位阿里云第三次入选 JCP 最高执行委员会 (JCP-EC),作为阿里云在 JCP-EC 的代表,李三红一直在参与 JCP-EC 领导下的相关 Java 标准讨论制定工作。

2023-04-18 15:337018

评论 2 条评论

发布
用户头像
C++如果不解决内存安全问题走向末路更容易成真。^-^
2023-04-18 23:02 · 湖南
回复
用户头像
阿里OpenJDK应该是国内最强的JDK了。Java自带虚拟机本身就代表了高性能的可能性,比如GraalVM这些。如果只是因为不适合当前流行的云原生就放弃积累的Java技术,转去新兴的语言,成本是很高的。谁也不能保证新语言到发展又会有什么限制,总不能用不同的语言反复开发相同的功能,没意义。
2023-04-18 18:01 · 广东
回复
没有更多了
发现更多内容

充分挖掘数字人民币的三个隐性价值

CECBC

26 K8S之Service资源调度

穿过生命散发芬芳

k8s 11月日更

在线VLOOKUP数据查找工具

入门小站

工具

7张图揭晓RocketMQ存储设计的奥妙

中间件兴趣圈

RocketMQ 存储 消息队列 Apache RocketMQ

非科班毕业生,五面阿里:四轮技术面+HR一面已拿offer

热爱java的分享家

Java 架构 面试 阿里 经验分享

如何使用 Workbench 远程连接到 MySQL 数据库 -MySQL Workbench 使用教程

蒋川

MySQL 数据库 MySQL 数据库

【死磕Java并发】-----J.U.C之读写锁:ReentrantReadWriteLock

chenssy

11月日更 死磕 Java 死磕 Java 并发

掘金新大陆——最后一个十亿蓝海

数据分析从零开始实战,Pandas读写TSV/Json数据

老表

Python json 数据分析 11月日更

如何通过mock数据提高前端开发效率?

石云升

大前端 Mock 职场经验 11月日更

在 Flutter 中使用 http包【Flutter专题2】

坚果

flutter 签约计划第二季

[Pulsar] Persistent Topic持久化消息

Zike Yang

Apache Pulsar 11月日更

ExoPlayer播放在线TS文件无声音问题分析

Changing Lin

11月日更

超强实时跟踪系统首次开源!支持跨镜头、多类别、小目标跟踪!

百度开发者中心

AI 实时跟踪

为什么Git用SHA做版本控制,而非像SVN用int数字或者是时间戳

吴脑的键客

git 学习

如何使用 Flutter 创建桌面应用程序【Flutter专题1】

坚果

flutter 签约计划第二季

虚拟偶像,人类探索元宇宙的萌芽

CECBC

Apache ShardingSphere 5.0.0 内核优化及升级指南

SphereEx

数据库 开源 架构 ShardingSphere SphereEx

【高并发】朋友去面试竟然栽在了Thread类的源码上

冰河

Java 并发编程 多线程 高并发 异步编程

C#中的yield

喵叔

11月日更

工具 | pg_recovery 设计原理与源码解读

RadonDB

数据库 postgresql 源码 RadonDB

献出我的膝盖!这份“基础-中级-高级”Java程序员面试集结,看完我是说直接跪了

热爱java的分享家

Java 架构 面试 程序人生 经验分享

CSS布局(六)之居中布局

Augus

CSS 11月日更

水晶球“数据洞察”正式上线:洞悉用量趋势变化,觉察互动体验细节

声网

人工智能 水晶球 数据洞察

Python Qt GUI设计:QPainter、QPen、QBrush和QPixmap窗口绘图类(基础篇—17)

不脱发的程序猿

Python GUI设计 PyQt5 绘图功能

猫,量子力学,和手机人像摄影之变

脑极体

如何使用 MySQL Workbench 自动生成 ER 图、同步更新远程数据库 - MySQL Workbench 使用教程

蒋川

MySQL 数据库 数据管理工具

Go语言学习查缺补漏ing Day8

Regan Yue

Go 语言 11月日更

linux如何将输出重定向到文件和标准输出

入门小站

Linux

Prometheus Exporter (十二)Consul Exporter

耳东@Erdong

Prometheus Consul exporter 11月日更

分享8个可以编译为JavaScript的语言

devpoint

typescript 函数式编程 11月日更 ClojureScript Clojure

云原生时代,Java会走向末路吗?_语言 & 开发_龙蜥社区_InfoQ精选文章