Java生态大洗牌:中国首份趋势全景报告,独家揭秘未来十年!

mysmile 11 0
Java生态大洗牌:中国首份趋势全景报告,独家揭秘未来十年!

深度聚焦:中国Java开发者的实战指南与趋势预言

Java生态大洗牌:中国首份趋势全景报告,独家揭秘未来十年!

重磅来袭!Dragonwell JDK 8.1.1-GA 全新发布,性能飙升、特性升级,引领云原生浪潮。

【导读】你是否好奇Java在中国的真实面貌?InfoQ独家推出《2019中国Java发展趋势报告》,带你穿透迷雾,洞察本土生态,重塑技术认知!

两个月前,InfoQ英文站发布《2019 Java发展趋势报告》,从技术生命周期剖析Java二十载演进。不料报告一出,激起千层浪:开发者质疑Java价值,担忧其落后于时代;更有人批评报告缺乏中国视角,脱离本土实战。

为此,我们打造这份《2019中国Java发展趋势报告》,深度聚焦本土实践,还原真实、立体的Java生态——拒绝盲目追捧,更抵制无端贬低。

自信地说,本报告汇聚阿里、腾讯、华为、美团、字节跳动、小米、红帽等顶尖企业专家,从核心框架到实战访谈,多维透视技术变革。我们还发起千人开发者调研,数据说话,直击痛点。现在,让我们一探究竟!

参与本次趋势报告的专家

杨晓峰,Java技术专家,OpenJDK Committer李三红,阿里/蚂蚁Java技术负责人,阿里云智能资深技术专家小马哥,阿里巴巴Apache Dubbo PMC和Spring-Cloud-Alibaba Architect田晓亮,华为云ServiceStage首席工程师和Apache ServiceComb PMC单致豪,腾讯TARS开源项目负责人吴革,美团点评高级技术专家陈楚晖,红帽AppDev首席架构师,开源技术专家王石冲,字节跳动大数据工程师、Scala程序员张涛,Kotlin专家,Android技术专家,开源实验室博主黄飞,小米互联网商业部技术主管 Java技术采用生命周期概览

这张中国Java技术采用生命周期概览图是本次趋势报告的精华,结论来自于各位专家的判断。某些方面专家们观点出奇的一致,当然也有很多部分专家观点并不相同。可谓是金句频现、火花四溅。

技术采用生命周期划分方式

创新者早期采用者早期大众晚期大众

技术采用生命周期是美国高科技营销大师杰弗里·摩尔在《跨越鸿沟》中提出的模型,衡量用户对新技术的接受程度。一项技术从出现到成熟,必经创新者、早期采用者、早期大众、晚期大众阶段。

每个群体间都有裂缝,但早期采用者与早期大众之间的“鸿沟”最大。只有跨越鸿沟,渗透早期大众,技术才能真正进入主流市场。

重要结论

1. Java 13 处于创新者阶段,Java 11 处于早期采用者阶段,Java 8 处于晚期大众阶段。

Java 11 将是未来Java用户的最可能选项;若企业对大堆栈GC能力、延迟SLA等要求不高,则缺乏升级动力,也难有技术力量解决版本评估、兼容性修正等现实问题;Java新版本升级在中国的宣传不足,许多企业看不到技术红利,影响升级积极性。

2. OpenJDK 处于创新者阶段。

虽然国内头部厂商都在定制OpenJDK,但采用范围有限,主体仍是Oracle JDK(据《JVM生态系统报告2018》显示,70%开发者用Oracle JDK,21%用OpenJDK);厂商转向OpenJDK,关键看是否愿为OracleJDK付费,否则OpenJDK可能逐步取代Oracle JDK,目前国内头部厂商已积极布局;公有云、私有云竞争格局,深刻影响OpenJDK竞争格局;OpenJDK常被视为退而求其次的选择。

3. 非Hotspot JDK生产实践——Graal VM、IBM OpenJ9 处于早期采用者阶段。

Graal VM兼容性及商业化条款尚不明确;其部分技术,如基于Java的JIT引擎,可能成为未来OpenJDK基础技术;国内企业普遍怀疑Graal VM、IBM OpenJ9进入大规模生产的可能性。

4. Lambda/Stream 处于晚期大众阶段、Vector API 处于创新者阶段。

Lambda语法及Stream API已广泛应用于开发日常,且无回退趋势;Vector API等前沿特性,仅少数有能力的公司探索,场景受限。

5. Kotlin 处于早期大众阶段,Scala 和 Groovy 处于晚期大众阶段。

Groovy光芒渐褪,逐步被Kotlin替代;Scala在适合领域称王即可,主流与否并不重要;Kotlin获谷歌强推,但对其未来空间仍有疑虑;尽管网上鼓吹Kotlin将取代Java,但至今无语言能撼动Java地位。

6. 微服务框架:Spring Boot 和 Spring Cloud 进入晚期大众阶段;ServiceComb 处于早期采用者阶段;Apache Dubbo 处于晚期大众阶段;Tars 处于早期大众阶段。

微服务技术处早期大众与晚期大众之间,新框架需技术突破才能立足;Java不再是微服务唯一选择;技术多元化时代,多语言微服务框架已成必备。 技术采用生命周期解读

上章已抛出专家观点,但结论背后需关键原因解读。本章按Java/JVM、主流框架、微服务三部分逐一展开。

Java/JVM

Java版本方面,专家观点一致:Java 13 处创新者阶段,Java 11 处早期采用者阶段,Java 8 处晚期大众阶段。

InfoQ开发者调研显示,88.7%参与者使用Java8,其中仅35%有升级计划,65%无计划。

杨晓峰认为这正常:Java8在可预见未来仍是生产主体,属晚期大众阶段。但对头部厂商,Java11或后续版本可能逐步规模化部署。此趋势仅限头部公司,若企业对大堆栈GC能力、延迟SLA等要求不高,则缺乏升级动力,也难解决版本评估、兼容性修正等现实问题。故结论:Java11处早期采用者阶段。

黄飞补充:正因Java11处早期采用者阶段,相关资料少,问题学习成本高,如JFR对11的支持,JMC对Java11分析能力弱。

对于Java 13,小马哥认为其在新GC算法提升及Socket实现上的变化令人期待,故列创新者。

Java升级方面,Oracle宣布从Java9起每半年更新大版本——Java11是长期支持(LTS)版,Java9、10为过渡版本(non‑LTS),陈楚晖不建议生产使用Java9、10。在他看来,小版本升级风险较小,大版本变更或需大量代码更改,这正是许多人坚持Java8、不更新Java11、12、13的原因。

对开发者升级动力不足,李三红解释更详:一是敏捷底层架构对软件升级的支持,企业对底层架构的重视程度关键;二是若企业享受不到技术升级的红利,如性能、编程效率提升,势必影响积极性。

InfoQ调研显示,对Java新特性,56%开发者认为可解决主要业务挑战,24%认为不能。这反映Java常被吐槽演进慢,但新版本采用不积极,表明Java/JVM发展与开发者实际需求存在脱节。

OpenJDK 定制版或公开发行版

因Oracle宣布2019年起Oracle JDK 8及以上版本服务器端部署不再免费,OpenJDK成大多数Java用户选项。据《JVM生态系统报告2018》,70%开发者选Oracle JDK,21%选OpenJDK。

陈楚晖介绍国内情况:目前国内开发者多用Oracle JDK,次为IBM JDK,部分企业用OpenJDK。

对OpenJDK技术采用生命周期划分,专家观点不一。杨晓峰认为虽国内头部厂商定制OpenJDK,但采用范围有限,故归创新者阶段。

但对参与OpenJDK的国内厂商,看法更积极。李三红认为:厂商是否转向OpenJDK,关键看是否愿付费用OracleJDK,否则OpenJDK或逐步取代Oracle JDK,目前国内头部厂商已布局,故定义OpenJDK在早期大众阶段。阿里巴巴使用并开源OpenJDK长期支持版Dragonwell,目前大部分应用运行在Dragonwell 8,部分已运行在Dragonwell 11。

美团吴革介绍:美团正测试基于OpenJDK的MtJDK,作为JDK基础服务。美团关注Redhat和Amazon升级。因Azul未公开OpenJDK源码,美团未基于Azul研发。

小米黄飞介绍:小米主要用OpenJDK8及11版本,目前以使用为主。

现有OpenJDK阵营分两类:一是IT和云厂商,对外提供发布、销售版本——Amazon、Redhat、Azul 、阿里巴巴、腾讯自产;二是技术强需求导致定制OpenJDK的公司,其产品难突破内部使用范围,如美团、小米。

对此阵营划分,杨晓峰观点:从OpenJDK发布版竞争格局看,最终将演变为云格局,坚持下来的将是头部云厂商或其合作软件厂商。换言之,公有云、私有云竞争格局深刻影响OpenJDK竞争格局。毕竟企业做OpenJDK需有利可图,无广泛用户群和对等收益,难支撑基础软件长期演进。

我们将此观点抛给李三红,他认为:在Java收费下,OpenJDK是大势所趋,Java将更开放,深度参与OpenJDK是为通过社区驱动Java前进;另,在当前企业上云大趋势下,若客户现有系统用Java写,云厂商为客户服务时势必要考虑让Java生态更好,这也符合客户诉求。

但杨晓峰也表示:从企业IT决策角度,相当部分企业更看重长期可信支持、及时安全漏洞和bug修复等。也会有企业决定风险自负,直接获取免费OpenJDK发行版,甚至不升级JDK,至今JDK7等历史版本仍有可观占有率,正说明此点。

非 Hotspot JDK 生产实践——Graal VM、IBM OpenJ9

Graal VM被列早期采用者阶段。李三红表示:Graal VM已在Oracle Cloud生产环境大规模使用,TCK兼容。但Graal VM下的静态编译SVM造成Java语言部分不兼容,这也是社区担忧处。如何让SVM/静态编译纳入Java Language/JVM Specification?值得关注。

杨晓峰看法更极端:在国内,怀疑Graal VM、IBM OpenJ9进入普遍生产的可能性较低。怀疑它们可能难走到下阶段,难跨越技术鸿沟。主因是国内公司多强调业务创新速度,无如此深度底层更新的耐心和业务必要性。且从技术看,在动态特性支持等需求无平滑解决方案前,迁移难度高,带来高开发和运维成本。

故对国内普通企业用户,无单独关注价值。未来更现实的技术采用路径是,用户使用集成Graal VM先进技术的OpenJDK主分支。同样,IBM OpenJ9有很多独到技术,若能合并入OpenJDK主分支,更能创造普遍生产价值,否则难免局限在IBM中间件等用户群内部。另,订阅Graal VM服务的具体信息可能在今年Code One说明,有兴趣可关注。

Lambda /Stream、Vector API 等语法与特性

对Lambda /Stream等语法与特性,专家认为应归晚期大众阶段。小马哥认为这些语法在开发日常中广泛运用,且无语法回退趋势。吴革表示:美团内部已大量使用Lambda和Stream表达式。

对Vector API等前沿特性,杨晓峰认为仅个别头部公司处原型阶段,应归创新者阶段。

Kotlin、Scala

对Kotlin和Scala,我们采访了两位专家。

今年5月Google I/O大会,Google官方宣布:Kotlin是Android应用开发人员的首选语言。这是否意味Java占据Android开发绝对统治的时代一去不返?

虽身为Kotlin专家,但张涛观点理性客观:每几年都有语言号称要取代Java,但从诞生至今,无语言能取代它。主因Java在服务端的稳固地位,无语言能做到Java这样完善的社区、用户群和三方库支持。

张涛认为:Kotlin在国内应处早期大众向晚期大众过渡阶段,未来一两年内,大部分JVM平台开发者将开始使用Kotlin。

2017年底,张涛曾做调查,邀请近1000名Android开发者,了解项目中是否使用Kotlin。当时结果是30%人用过Kotlin,60%人听说过,还有80多人未听说。他相信目前国内Android应用应90%都包含Kotlin代码。

此前InfoQ曾访谈字节跳动大数据工程师、Scala程序员王石冲及另几位Scala社区专家,了解Scala在国内发展。对有人称Scala难成主流的说法,王石冲表示:Scala为何非要成主流?它在适合领域做王者就够了,主流与否并不重要。

王石冲把Scala归在早期大众或晚期大众阶段:Scala在可预见未来都会是小众——有少部分人非常喜爱它;有少部分团队或公司使用它;大部分人最多只听说过它。Scala无论在国内还是国外,都称不上主流语言。但有部分团队水平很高的公司,深度应用Scala做事。

成名的例子有Twitter、LinkedIn、Verizon等。金融行业则有摩根士丹利、渣打等(但他们作为闷声发大财的典型,很少对外宣传技术选型)。而很多硅谷初创团队早期为快速开发,也采用Scala。在国内,除了小米、阿里和腾讯的部分团队及类似GrowingIO、水滴的初创公司和一些广告公司外,大部分开发者都用Scala做Spark开发。因无典型的、具有号召力的大公司主导,Scala在社区方面也一般。

Spring Boot/Cloud、Apache Dubbo、TARS、ServiceComb 等微服务框架

对微服务框架的技术采用生命周期划分,我们采访了阿里、腾讯、华为等几家大厂专家,这几家大厂都有各自的微服务框架解决方案。但微服务框架的王者仍非Spring Boot和Spring Cloud莫属,对此大家也达成共识——Spring Boot/Cloud处晚期采用者阶段,拥有大量用户。从InfoQ此次开发者调研看,选Spring Boot/Cloud的开发者占70%;次为Apache Dubbo,占20%;其他微服务框架占比还不高。

田晓亮表示:Spring Cloud社区仍在蓬勃发展,也开始为云厂商创造商业机会,如何与Spring Cloud结合,成为云厂商要解决的关键问题之一。

虽越来越多企业选ServiceComb进行微服务转型,并获成功,但未普及到早期大众阶段。ServiceComb中微服务框架与Service Mesh可融合使用,让用户有灵活选择。

Java仍是最流行语言,但企业终能选其他语言进行微服务开发。同时提供Spring Cloud组件可使其接入ServiceComb,帮助Spring Cloud用户平滑向多语言转型,Java不再是微服务唯一选择。

Apache Dubbo一开始不叫此名,Dubbo一开始只是阿里内部系统,2010年Dubbo项目重构,2018年初,Dubbo项目正式进入Apache孵化器。在小马哥看来,Apache Dubbo属晚期大众阶段,但最新的Apache Dubbo ECO System(生态系统)则是基于Apache Dubbo衍进的Cloud Native解决方案,目前尚未枝叶茂盛,处创新者阵营。

对Apache Dubbo,黄飞表示:它在RPC中间件领域可算引领者之一。Apache Dubbo的服务注册与发现、服务治理相对完善,支持灰度发布,智能的负载均衡策略、可视化的服务治理与运维工具便于开发人员上手。可以说Dubbo/Dubbox在RPC框架/微服务领域已展露头脚甚至在某些方面已形成优势。

TARS在腾讯内部叫TAF(Tencent Application Framework),是腾讯应用产品最多、最广泛的微服务开发框架,并已在腾讯大规模应用超十年。2017年中旬,腾讯正式将TARS开源,开源后一年便成为Linux基金会开源项目。由于相对其他微服务项目开源晚,错过了很多社区发展红利。

对TARS,据单致豪介绍,不同的微服务主流框架可满足不同的应用痛点,TARS则原生专注多语言和高性能。他认为TARS已有大型互联网公司广泛使用,已从早期采用者阶段迈过鸿沟,进入早期大众阶段。

Java应用实践

InfoQ:您的企业使用的JDK版本情况,是否采用了某个OpenJDK发行版?您如何看待OpenJDK在国内的发展?(如果没有采用,原因以及后续计划?)

阿里巴巴李三红:目前阿里巴巴大部分应用运行在Dragonwell 8,有些已运行在Dragonwell 11,我们正逐步推动从Java8到Java11的升级,充分享受技术红利。

美团吴革:美团现阶段主要用Java8,很少一部分是Java7。部分核心团队正尝试Java 11。美团内部采用的开发版本JDK主要还是Oracle JDK。服务器上的JDK版本主要是美团自己的MtJDK和Oracle JDK。美团现阶段正测试基于OpenJDK的MtJDK,作为美团JDK基础服务。

MtJDK主要基于OpenJDK构建,现阶段主要针对补丁和安全性进行维护。现阶段在特定业务线内部进行测试和应用。未来配合Serverless等基础服务升级,MtJDK会在JDK启动性能和增强应用之间的隔离进行深度定制。

小米黄飞:小米主要用OpenJDK8及11版本。目前对OpenJDK主要还是以使用为主,主要业务关注点在于这个版本是否为长期支持;是否有更加高效易用的特征,例如GC算法由CMS、G1升级到ZGC等;开源社区是否活跃;以及对遇到的问题是否有足够丰富的资料与讨论等。

Java作为使用最广泛的语言,最近几年还是有比较大进步的,无论从语法的易用性上还是性能上都有很大程度的提升。吸收了函数式编程的思想,lambda表达式、Parallem stream、Var变量等提升了开发人员的效率与代码的简洁性。ZGC无疑是一项重大的改进,在一定程度上解决了Java天生的GC问题。

InfoQ:您的企业目前在支持Java技术栈方面的策略是什么?计划和目标是什么?相关的核心痛点或者业务需求是什么?

腾讯单致豪:腾讯内部占领导地位的开发者是C++,同时有大量的Node.Js、Golang、Java、PHP、Python开发者,当然也有少量的Rust、C的开发者。我们在海量用户的后端大部分采用C++和Golang,Java在前端和大数据方面有广泛使用,在对外ToB的交付中也大量采用。

由于腾讯的开发者使用了多种开发语言,而且不同开发语言在不同领域有不同优势,所以当前要解决的问题是多语言开发的服务互通问题,一套支持多语言的微服务开发框架是必需品,TARS也是在这样的多语言背景下诞生。

美团吴革:美团的Java技术栈策略偏向稳定,在稳定的基础之上推动技术升级。Java核心痛点就是依赖升级,当一个jar包升级,必须一个服务一个服务升级,不能自动化整体升级,所以对于美团来说,正在解决相关依赖升级的问题。

红帽陈楚晖:红帽主要采用市场流行的Java技术栈。大部分的项目都会采用Java进行开发,主要是因为Java比较成熟,有很多成熟的技术框架可以直接使用,同时也有很多类似的代码可以重用,也比较容易找到熟悉Java的技术人员。这样开发的速度和效率会比较高,以及成本会比较低。

InfoQ:请介绍您的企业是否进行了微服务实践?如果是,在整体系统架构中的比例是多少?如果不是,是否有相关计划?

阿里巴巴小马哥:大多数应用已实施微服务架构,微服务应用的比重达80%以上。

腾讯单致豪:早在2008年以前,腾讯已经开始实践“大系统小做”的海量服务之道理念,大量的服务已经是遵循微服务理念开发。因为腾讯要支持快速迭代和敏捷研发,所以微服务比例占比在95%以上。核心业务模块因为要支持海量用户的巨大流量,100%都是微服务。腾讯内部使用TARS开发的微服务已经超数十万个节点,在规模上来看,是全球最大的微服务集群之一。

美团吴革:美团在2015年开始微服务架构演进,核心系统已经100%微服务化。

红帽陈楚晖:已经进行了微服务实践,在整体系统架构中占比不超过30%。

华为田晓亮:华为云的所有服务都采用微服务架构,但并非所有服务都用了某种微服务解决方案——比如ServiceComb,Istio或者Spring cloud,各服务主要是自行实践微服务设计模式。但几乎所有应用服务都采用了华为云容器服务CCE(Cloud Container Engine)的kubernetes集群。

InfoQ:您所采用的主要微服务框架是什么?如何判断国内该领域的技术发展情况?您认为微服务主流框架的争夺是否尘埃落定?

阿里巴巴小马哥:2015年初开始,阿里巴巴集团的应用架构逐渐由SOA衍生至微服务,所使用的微服务框架主要以Spring Boot/Spring Cloud和Apache Dubbo(HSF)为主,涵盖所有Java中间件核心基础设施、九成以上的内部系统,以及阿里云商户应用等。

同时,基于Spring Cloud API,阿里巴巴衍生并开源出一套全新的微服务框架 - Spring Cloud Alibaba,并且正走向下一代“云原生”架构,越来越多的应用开始尝试Serverless以及Service Mesh等前沿技术。相信未来微服务在不同语言和平台上将会提供更多的选择,至于那时谁是王者或主流框架,这个问题的答案已经不再重要。

腾讯单致豪:不同的微服务主流框架可以满足不用的应用痛点,比如SpringCloud、Dubbo专注Java领域,TARS则专注于多语言和高性能,充分发挥C++的高性能、Go的性能与高效兼顾、Java的全能、Python丰富基础库尤其是AI方面、Node.Js和PHP便捷全面为Web而生等等优势。

目前中国和美国大厂开源的微服务框架(腾讯的TARS、阿里的Dubbo、百度的brpc、谷歌的gRPC、Facebook的Thrift、Pivotal的SpringCloud)基本能覆盖所有用户的痛点,企业直接从开源社区选型能解决自己痛点的开发框架即可。

美团吴革:主要采用自研OCTO和Pigeon,现在正在开发Service Mesh服务。现在国内主要是基于Dubbo、Spring Cloud、GooglegRPC作为基础进行二次封装,主流框架选型已经相对成熟。

红帽陈楚晖:主要采用Spring Cloud的微服务框架,也对Service Mesh(Istio)有研究。由于现有的微服务框架需要开发人员过多的介入,需要有大量的开发,所以目前大家比较看好Istio。但是由于Istio还不够成熟,因此大家都还处于预研阶段。

华为田晓亮:华为许多的云服务和内部项目采用了ServiceComb的微服务解决方案,比如消费者云,在全世界运行着数千微服务实例来为手机用户提供服务。华为云的音视频服务也运行着数千的微服务实例,来提供视频通话、音视频解码等服务。并且我们也向社区(通过ServiceComb)和商业用户(通过ServiceStage)提供解决方案。

InfoQ:您如何看待Service Mesh在国内的发展现状和发展前景?

阿里巴巴小马哥:个人对Service Mesh的看法是乐观偏谨慎的,一方面,作为从业人员,对于技术总有猎奇的心态。另外一方面,这个技术在设计上存在一些理想主义,比如,性能损耗以及稳定性,并且分布式场景中的典型问题并没有得到解决和改善,比如数据一致性、分布式事务等。

据我所知,国内不少的互联网公司,如阿里巴巴、蚂蚁金服以及美团等已经开始在生产环境试点Service Mesh,听起来这是一件好事。前沿的技术总需要有人去探险,如果成功,前人栽树,后人乘凉。至于它能否成功,主要看市场是否愿意买单。

美团吴革:未来Service Mesh会在跨语言场景下大放异彩。Service Mesh主要是基于云平台和多技术栈场景下的痛点进行的开发,短时间内不会有爆发性的增长。但是基于原生云架构系统的增多,未来Service Mesh会不断演进,最终变为云原生架构下的网络基础服务。

腾讯单致豪:Service Mesh目前还处在早期发展阶段,其理念设计已经决定了性能及维护性上会是它最突出的短板。但有部分企业包括腾讯已经尝鲜,也有小量周边不重要非核心业务在上面跑。Service Mesh有着优美的架构理念,但性能确实让人担忧,社区生态也至少需要三年以上的发展时间。

华为田晓亮:大环境来看,传统企业面临的挑战依然是业务系统如何向微服务转型,以构建自己的业务平台,在这其中微服务框架是一种手段。为了寻求更快速地微服务化,开发人员就会避免学习陡峭的开发框架,而转向使用Service Mesh。开发者将结合轻量的SDK(例如对接监控系统、配置管理、AI平台,而不是微服务框架)与Service Mesh来实现自己的业务系统,从繁重的架构工作中解放出来。这个发展历程在我看来大概需要2-3年的时间。

而且,在我看来,最终站上舞台的并不是Service Mesh,而是底层由Service Mesh提供支持的Serverless平台,用户感知不到Service Mesh技术的复杂性,否则将面临比开发框架更繁重的基础设施运维挑战。所以Service Mesh其实和Serverless的发展是绑定在一起的。Serverless的普及和使用必然会帮助Service Mesh进行发展。

InfoQ:对于当前Java的整体发展情况,您有什么感想?

杨晓峰:在可预见的将来,Java依旧是企业软件、大数据、电商等等最核心的技术栈。但是目前Java/JVM能力在云时代有一定局限性,比如云里强调的无服务器、微服务等场景,Java/JVM都有一定短板。

另外Java新版本采用速度这么慢,本身就说明,Java创新和实际需求存在某种程度的脱节——一方面大量创新会带来兼容性和版本混乱的问题;另外创新带来的优点却需要极大增大开发运维成本,这也让部分创新的价值被抵消了。

但是Java会被取代吗?应该也不会,目前在社区、工具、类库等等方面,Java还没有真正意义的对手,但是最大的威胁是新的需求浪潮是否与你有关。我们可以看下GitHub上Java新项目的趋势,一定程度上可以佐证Java坚实的基本面和不可忽视的隐忧。

阿里巴巴李三红:从技术角度来看,Java(JDK)这二十几年的发展一直试图在Productivity以及Performance之间做最好的平衡。Java是静态类型语言,但是为了生产效率提供了大量动态的特性比如Bytecode Instrument、Dynamic Class Loading、Metaprogramming(Annotation、Reflection等,这些形成了Java在运维、生产监控等领域的基石技术。

同时由于Java大量的动态特性存在,使得它在面向云原生、Serverless计算时Memory Footprint、Startup方面被人所诟病。这也是整个Java社区,当然包括Alibaba Dragonwell所试图解决的问题。

阿里巴巴小马哥:Java目前仍具在编程语言排行榜上夺魁的能力,不过在整体比重上微幅下滑。个人看来,未来这个趋势还将持续。究其原因,一方面是由于新语种出现的中短期效应,一方面是Java的编程复杂度并没有明显的降低,比如I/O处理、并发/并行计算,以及类加载等等。再者是Java与操作系统之间的交互仍不够充分,尽管Java 9开始提供了不少的API,然而了解和使用的群体不足。Java在这方面明显不及GO语言。

从语言层面来看,Java正在向主流非Java语言融合,解决其中鸿沟的关键是语法的变化,比如Java 8的Lambda表达式和Java 10的局部变量类型(var)等。个人认为这是一件好事,未来前后端不分家,相互渗透,对于彼此语言都是良性发展。

个人比较期待的是GraalVM对Java的改变,传统Java应用必须依赖JVM进程加载字节码后解释执行,无法保证所有的代码能够在运行期编程完成,不免有运行时编译所带来的性能开销,从而影响JVM的启停时间。简单地说,这种方式不够Native,对于云原生或许不够友好。如果未来GraalVM的社区版也能够像OpenJDK那般“亲民”,Java的变化将是颠覆性的。

美团吴革:当前Java已经发展成为一个庞然大物,语言上基本不会有太多突破,更多是借鉴和兼容。随着GC算法的升级和编译器换代,面对Go等新一代语言挑战,还有一战之力。

腾讯单致豪:毋庸置疑,Java语言依然活力十足,但在某些方面已经失去优势,如云原生领域现在出现了更具活力的Go语言。纷繁的世界必定会出现多语言并存、不断替代的现象。回顾历史发展进程,一种语言要从出现到早期大众使用基本都需要十年时间,能历经十年磨砺生存下来的开发语言,必定是有很强的生命力,而且都会有不同的企业构筑其生态。正如上文所说:不同语言也会在自己优势之处持续发展,形成很强的竞争壁垒。

字节跳动王石冲:Scala语言目前有两个大的目标运行平台——JVM和js,所以Scala作为一个语言和生态并不敢完全投资在单一目标平台上。虽然JVM本身在不断进步,但是Java已经被同平台的多种语言赶超,比如Kotlin、Clojure、Groovy。

报告参与者介绍

杨晓峰,Java技术专家,OpenJDK Committer。

李三红,阿里云智能资深技术专家,2014年加入蚂蚁金服,现为阿里/蚂蚁Java技术负责人,有超过10年的Java开发经验。活跃于Java技术社区,在Java虚拟机领域拥有多项技术专利。

小马哥(@mercyblitz),《Spring Boot编程思想》作者、Apache Dubbo PMC和Spring-Cloud-Alibaba Architect。

田晓亮,华为云ServiceStage首席工程师和Apache ServiceComb PMC,7年云计算领域工作经验,在PaaS,混合云,DevOps,微服务,APM方面有多年的实践经验。

单致豪,腾讯技术委员会和腾讯开源办公室成员,负责微服务框架TARS的开源生态,并将项目捐赠Linux基金会。云原生产业联盟专家顾问,DevOps标准专家,GOPS大会主席团。

吴革,美团点评高级技术专家,现在主要负责美团点评小象事业部系统架构工作。

陈楚晖,红帽AppDev首席架构师,开源技术专家,熟悉多种开源中间件,长期就职于国际知名软件公司,二十年中间件工作经验,拥有丰富的电信运营商、政府企业、金融等行业的系统集成、IT项目管理经验,具有丰富的一线实践经验。

王石冲,字节跳动大数据工程师,Scala程序员。译著有《反应式设计模式》。主要专注于基于Scala构建的反应式架构以及相关应用的实现。之前在从事中小型企业的实时数据流分析系统的开发。第四届阿里中间件性能大赛优胜奖,第一届阿里云PolarDB性能大赛季军。

张涛,网名kymjs,Android技术专家,“开源实验室”博主,Kotlin技术推广者,四年前开始接触和使用Kotlin语言。带过团队,做过架构,写过应用,做过开源社区。曾先后在沪江、饿了么、携程工作,目前在一条生活馆负责移动开发管理工作。

黄飞,小米互联网商业部技术主管,在互联网商业化变现方面有丰富经验,负责小米互联网广告业务引擎与算法架构工程研发,在高并发分布式推荐系统有多年的实践经验。

特别感谢:感谢杨晓峰老师参与此次报告的前期策划,并在报告撰写过程中给予专业的建议和指导。

作者 | 张晓楠

本文为云栖社区内容,未经允许不得转载。

相关问答

Java学习路线与建议,新手如何规划成长路径?-ZOL问答

第二阶段:深入学习JavaScript,同时熟悉jQuery框架。JavaScript是前端的核心语言,对于实现页面动态效果和交互功能至关重要,虽然学习过程中会遇到一定难度,但必...

Java学习路线与资源推荐?-ZOL问答

推荐你去菜鸟教程过一遍基础,再配合Java核心技术卷1看看。后面学数据库连接、JDBC、Maven这些工具,接着搞SSM框架(Spring、SpringMVC、MyBatis),可以做个博客系...

Java为何被称为工业文明的精华?-ZOL问答

6条回答:Java作为现代编程语言中的重要一环,在全球计算机教育和工业应用中占据着不可忽视的地位。无论是在学术界还是工业界,它都展现出了极强的生命力和广泛的...

Java校招面试经验分享-ZOL问答

目前我已经正式加入阿里巴巴淘系技术团队,担任Java后端开发工程师的职位。在这篇文章中,我想分享一下自己对于应届生应聘Java岗位所需具备的专业能力与知识结构...

java软件工程师应该具备哪些基本素质呢?申请方

个重要职责就是要把用户的需求功能用某种计算机语言予以实现。编码能力直接决定了项目开发的效率。这就要求软件工程师至少精通一门编程语...编码...

Java练手项目有哪些推荐?-ZOL问答

对于许多刚开始学习Java的初学者来说,找到合适的练习项目往往是一个令人头疼的问题。Java项目种类繁多,内容丰富,能够帮助学习者更好地掌握语言特性、开发流程...

Java自学入门,推荐课程指南-ZOL问答

在Java与Python之间,更倾向于先掌握Java。因此想请教大家,Java该如何高效入门?希望能跳脱出以往学C语言时照本宣科、容易陷入迷茫的学习方式。欢迎推荐一些优...

.NET与Java对比,语言优势与生态差异-ZOL问答

作为一名长期从事开发、使用.NET、Java以及其他多种语言的程序员,我想谈谈自己的看法。.NET从诞生至今,始终受到一些带有偏见的评价,这一点相信了解它的人心...

Android与Java后端开发选择指南-ZOL问答

目前来看,无论是Java还是安卓开发,在市场上都属于热门方向,需求量都不小。很多企业并不缺资金,真正缺乏的是合适的技术人才。因此,两者在短期内的就业前景都很...

Java新手学习指南,视频推荐与刷题平台-ZOL问答

对于刚开始学习Java的新手来说,可以选择在B站上观看尚学堂推出的Java零基础课程。这套课程非常详细地讲解了从零开始学习Java直至掌握的核心过程,非常适合初学...