最近看到JRebel发布了《2022年Java发展趋势和分析》,于是借此分析一下Java行业的现状,希望给大家一些参考。
JRebel 是通过调研问卷的方式总结的报告,涉及了不同国家、不同岗位、不同公司规模、不同行业,相对来说,该调查报告是有一定参考意义的。
一、Java语言及开发趋势
1.Java8 的占比还是比较高
从报告中可以看出,Java8 占比37%,Java11占比29%,甚至有12%的被调查者使用了高于Java12的版本。
Java8是2014年发布,相较于之前版本,增加了Lambda表达式、Stream流式处理等一种优秀的API。至今已8年时间,Java版本也是从8一直升到了17。版本号一直在增加,却没有增加特别吸引人的语言特性。
2.哪些因素是升级的动力?
主要的升级因素包括LTS版本(25%)、安全性(23%)、性能(20%),而新特性(18%)和随大流(14%)的占比低一些。
从这点我们也就知道为什么Java11之后的版本占比并不高了,随着Java17的发布,可能Java8和Java11的占比会降低。安全性方面,除非是严重的漏洞,一般Java开发团队会通过补丁的方式升级,不会影响大版本号占比。
性能方面,Java团队一直在不断优化,随着G1、ZGC、Shenandoah 等一众优秀的GC被添加进来,这也成为大家从Java8升级的重要原因。
就功能特性而言,Java11之后增加了Record类型、密封类、instanceof模式匹配、Swtich表达式和模式匹配等一些语法。这些新特性,也能够提升升级到Java17的意愿。
3.升级Java17的意愿还是比较强的
Java17 是 2021 年下半年发布的LTS版本(长期支持版)。
从报告中可以看出来,有37%的人会在未来6个月内升级,有25%的人会在6-12个月内升级,不会升级的占比仅占8%。
可见,有62%的人会在未来一年内升级到Java17,大家的升级意愿还是比较强的。
4.Java 应用架构趋势
各种架构风格中,微服务架构仅占32%,单体架构占比22%,模块化单体架构占比13%,SOA架构占比12%。
从结果来看,这个问卷的对架构风格的定义和分类比较细腻。
这里不对架构风格做出评价,架构只有合适与否,没有优劣之分。
二、Java技术趋势
1.Java应用超过半数使用了容器部署
从问卷结果可以看到,Docker使用率是41%,Kubernetes使用率是26%,VMware使用率是16%,Vagrant使用率是3%,即有86%已经实现了虚拟化,其中Docker、Kubernetes占比最高。
所以在Java升级版本特性中,实现了容器感知的能力,使Java服务容器化更容易一些。
2.近半数服务端使用Tomcat容器
SpringBoot是众多微服务框架中的首选,SpringBoot默认的应用容器是Tomcat。加之Tomcat的开源方式,将近半数应用服务器选择Tomcat也是预料之中。
3.Maven是主要的构建工具
Maven和Gradle到底该用哪个?这个问题似乎争论许久。从问卷结果看,Maven占有率是68%,Gradle占有率是23%,Maven还是有绝对的优势。
Gradle采用了约定大于配置的方式,与SpringBoot的理念一致。但是从市场接受度和发展而言,并没有形成替换Maven的风潮。Android项目默认使用Gradle,能够看出Google对Gradle的推崇,也从侧面印证Gradle的优秀。但是,Gradle并没有绝对优势。
三、开发者生产力趋势
1.重新部署应用的时间
很多时候,我们可能只改动一行代码,然后验证功能是不是正常,这个时候需要重新部署应用。JRebel统计了重新部署需要花费的时间。
从结果上看,重新部署需要超过3分钟时间的占50%,其中21%的比率需要10分钟以上。
2.如果节省重新部署的时间你会做什么?
有28%会增加新功能;有20%会优化系统性能;有19%会完善测试覆盖。这些都是正向的,大概率的是那些回答其他的:喝咖啡、喝啤酒、开趴、睡觉、钓鱼……
技术不断发展,我们需要学习的东西越来越多,很多时候感觉学不动了。但既然选择了这个行业,拿着高于其他行业的薪资,也承担着各种风险,总归是要有一些技能傍身,才不至于被历史的车轮碾成粉末。