[转]2022 年 Java 行业分析报告

2022 年 Java 行业分析报告

你好,我是看山。

前段时间介绍了从 Java8 到 Java17 每个版本比较有特点的新特性(收录在 从小工到专家的 Java 进阶之旅 专栏),今天看到 JRebel 发布了《2022 年 Java 发展趋势和分析》,于是借此分析一下 Java 行业的现状,希望给大家一些参考。

JRebel 是通过调研问卷的方式总结的报告,涉及了不同国家、不同岗位、不同公司规模、不同行业,相对来说,该调查报告是有一定参考意义的。

Java 语言及开发趋势

Java8 的占比还是比较高

我们先来看下大家都在使用的 Java 版本(包括 JVM 语言:Kotlin、Groovy、Scala):

Java 各版本语言占比

从结果我们可以看到,Java8 占比 37%,Java11 占比 29%,甚至有 12%的被调查者使用了高于 Java12 的版本。

Java8 是 2014 年发布,相较于之前版本,增加了 Lambda 表达式、Stream 流式处理等一种优秀的 API。至今已 8 年时间,Java 版本也是从 8 一直升到了 17。版本号一直在增加,却没有增加特别吸引人的语言特性。

哪些因素是大家升级的动力呢?

升级的动力

可以看到,主要的升级因素包括 LTS 版本(25%)、安全性(23%)、性能(20%),新特性(18%)和随大流(14%)占比低一些。

从这点我们也就知道为什么 Java11 之后的版本占比并不高了,随着 Java17 的发布,可能 Java8 和 Java11 的占比会降低。安全性方面,除非是严重的漏洞,一般 Java 开发团队会通过补丁的方式升级,不会影响大版本号占比。

性能方面,Java 团队一直在不断优化,随着 G1、ZGC、Shenandoah 等一众优秀的 GC 被添加进来,这也成为大家从 Java8 升级的重要原因。

就功能特性而言,Java11 之后增加了 Record 类型、密封类、instanceof 模式匹配、Swtich 表达式和模式匹配等一些语法糖。这些新特性,也能够提升升级到 Java17 的意愿。

升级 Java17 的意愿还是比较强的

Java17 是 2021 年下半年发布的 LTS 版本(长期支持版)。

我们看下大家升级的意愿:

升级 Java17 的意愿

从结果可以看出来,有 37%的人会在未来 6 个月内升级,有 25%的人会在 6-12 个月内升级,不会升级的占比仅占 8%。

可见,有 62%的人会在未来一年内升级到 Java17,大家的升级意愿还是比较强的。

OracleJDK 和 OpenJDK 占据过半市场

我们都知道,市面上有很多的 JDK 版本,在 Oracle 起诉 Google 侵权之前,非企业特供的情况下,我们基本上用的都是 OracleJDK,后来因为容器中使用 JDK 版本的版权问题,容器中大部分使用了 OpenJDK。

从问卷结果也反映了这种情况:

JRE/JDK 各种版本的市场份额

OracleJDK 的版本占比 36%,OpenJDK 的版本占比 43%,其中包括标准 OpenJDK 和 AdoptOpenJDK 版本。

有些同学会疑惑 OracleJDK 和 OpenJDK 的区别在哪?我们日常用到的部分,没有任何区别。

Java 应用架构趋势

这个问题的结果有些出乎我的预料:

Java 应用架构趋势

各种架构风格中,微服务架构仅占 32%,单体架构占比 22%,模块化单体架构占比 13%,SOA 架构占比 12%。

从结果来看,这个问卷的对架构风格的定义和分类比较细腻。

很多公司把系统的服务化、模块化也统称为了微服务,这是一种很严重的错误,在之前的文章 《微服务架构的陷阱:从单体到分布式单体》 中介绍过这种错误。

推荐阅读:

  • 《什么是微服务?》
  • 《微服务编程范式》
  • 《从单体架构到微服务架构》。

这里不对架构风格做出评价,架构只有合适与否,没有优劣之分。

微服务架构趋势

既然微服务架构占比高一些,我们就来看一下微服务架构的应用趋势。

微服务架构的应用状态

微服务架构使用状态

从结果来看,有 44%的人团队已经是完全微服务架构了,还有 44%的团队在向微服务架构迁移。可见,在 Java 行业中,微服务架构是得到大家普遍认可的。

但是这个结果与上面的架构风格占比结果有出入,可能是问卷题目设计问题,或者问题回答者的主观原因,不能够苛求结果准确性。

每个应用中微服务的数量

每个应用中微服务的数量

既然是微服务架构,每个应用中服务数量必然超过 1 个。从结果可以看出来,有 54%的应用中少于 10 个服务,还有 22%的应用服务数量超过 20 个。

微服务数量与公司规模的关系

按照公司规模维度,越是大公司,每个应用中服务数量越多,结果符合康威定律的。从大家普遍实践结果看,当团队规模较小时,要尽量减少微服务数量。市面上很多老师会告诉我们,微服务架构要按照业务域拆分,但是你要知道,如果团队规模不大,即使拆分了业务域,可能最终开发调试维护也只有你一个。

SpringBoot 几乎霸占了整个微服务市场

微服务框架的使用度

从结果看,SpringBoot 几乎霸占了整个微服务市场。所以,大家在日常工作学习过程中,还是主要看看 SpringBoot 栈吧。

在国内,SpringBoot 技术栈还会细分为 SpringNetflixCloud 栈、SpringAlibabaCloud 栈、SpringBoot+Dubbo 栈等。

不同的技术栈中组件有些差异,所以我们需要掌握的不是简单的应用,还要了解其中的原理。原理掌握了,不同的组价只是在应用层面的差异。

启动时间在增长

随着公司业务的增长,应用中会增加各种各样的新功能。问卷中有个问题是关于随着时间推移,微服务启动时间的变化:

启动时间在增长

可见,有 60%的服务启动时间都在增加,甚至有 13%的应用启动时间增长超过 50%,有 30%的应用启动时间增长范围在 10%-50%。

为什么启动时间会增长呢?这个与公司业务增长后,代码增加了很多新功能有关。随着功能增加、类的增加,系统体积增大、加载类数量增大,启动时间会随之增加。这会引起系统的腐化,当腐化到一定程度,可能就需要重构了。或者随着业务增长,原来的微服务边界划分不合适了,需要重新划分系统边界,拆分微服务。

启动需要多长时间

既然微服务总体的启动时间在增长,那启动时间一般是多久呢?

启动需要多长时间

可以看到,只有 9%的服务在 1 分钟内启动成功,有 26%的服务启动时间需要 10 分钟以上。

不同公司规模服务启动时间分布

从上图可以看出来,人员规模大于 100 人的公司中,服务启动时间普遍长于少于 100 人的公司。产生这种情况的原因有这么几个:

  1. 公司规模大一些,可能业务复杂一些,服务中的代码、类库更多一些;
  2. 公司规模大一些,依赖的组件更多一些,在服务启动时,需要与各种中间件建立链接,然后彼此交换成功心跳,自然需要时间更多。

采用微服务其中一个好处是服务足够小,启动时间比较少。但是,从上面两个问卷结果来看,普遍情况是启动时间比较长,而且在变得更长。

Java 技术趋势

Java 应用超过半数使用了容器部署

Java 应用超过半数使用了容器部署

从问卷结果可以看到,Docker 使用率是 41%,Kubernetes 使用率是 26%,VMware 使用率是 16%,Vagrant 使用率是 3%,即有 86%已经实现了虚拟化,其中 Docker、Kubernetes 占比最高。

所以在 Java 升级版本特性中,实现了容器感知的能力,使 Java 服务容器化更容易一些。

PaaS 平台还得看 AWS

PaaS 平台

JRebel 的这个问卷调查是全球性质的,从全球范围看,AWS 当之无愧的 NO.1。AWS 作为亚马逊曾经的附属产业,已经成为了亚马逊的重要业务之一。

与亚马逊的经历类似,阿里巴巴从电商切入,然后布局云服务(阿里云)。如果还是走亚马逊的老路,势必没法超越。不过阿里从很多年前开始布局 CPU 和芯片领域,如果能够有所突破,就可以破开西方技术的封锁,依托我国的发展潜力,未必不能撼动亚马逊的 PaaS 服务商地位。

近半数服务端使用 Tomcat 容器

应用服务器

前面关于微服务的问题中,SpringBoot 是众多微服务框架中的首选,SpringBoot 默认的应用容器是 Tomcat。加之 Tomcat 的开源方式,将近半数应用服务器选择 Tomcat 也是预料之中。

Maven 是主要的构建工具

构建共建

Maven 和 Gradle 到底该用哪个?这个问题似乎争论许久。从问卷结果看,Maven 占有率是 68%,Gradle 占有率是 23%,Maven 还是有绝对的优势。

Gradle 采用了约定大于配置的方式,与 SpringBoot 的理念一致。但是从市场接受度和发展而言,并没有形成替换 Maven 的风潮。Android 项目默认使用 Gradle,能够看出 Google 对 Gradle 的推崇,也从侧面印证 Gradle 的优秀。但是,Gradle 并没有绝对优势。

近半数开发者使用 IntelliJ IDEA

IDE

我是从 2015 年开始使用 IntelliJ IDEA,试用之后立马抛弃了 Eclipse。首先是快捷键的设计,可以很大程度摆脱鼠标。内置的插件市场,可以找到任何需要的插件,提升编程体验。更关键的是,JetBrains 公司出品的 IDE,可以无缝对接,实现不同语言的编程支持。

Eclips 也不是一无是处,它的插件体系也是相当丰富,很多低代码开发工具都是基于 Eclipse 开发的。如果是普通开发,推荐使用 IntelliJ IDEA;如果想要做低代码工具,可以考虑对 Eclipse 进行二次开发。

开发者生产力趋势

这一部分属于 JRebel 有私心的部分,JRebel 一个优势功能是提供热部署能力,所以会在问卷中询问被调查者重新部署应用的时间。

重新部署应用的时间

很多时候,我们可能只改动一行代码,然后验证功能是不是正常,这个时候需要重新部署应用。JRebel 统计了重新部署需要花费的时间。

重新部署应用的时间

从结果上看,重新部署需要超过 3 分钟时间的占 50%,其中 21%的比率需要 10 分钟以上。那这段时间,大家会干什么?

如果节省重新部署的时间你会做什么?

重新部署时大家在做什么

有 28%会增加新功能;有 20%会优化系统性能;有 19%会完善测试覆盖。这些都是正向的,大概率的是那些回答其他的:喝咖啡、喝啤酒、开趴、睡觉、钓鱼……

不过也是符合我们工作的原因:我们工作是为了生活,而不是为了加班。所以,假如每天给你 1 小时的自由时间,你会用来做什么呢?欢迎评论区讨论。

文末总结

  1. 微服务的使用情况来看,启动时间和重新部署时间不是优先考虑的因素。多数选择微服务架构的原因无非有两个:
    1. 看中微服务架构流行趋势,听说这个很好,那就开始用,至于是微服务架构还是分布式单体架构,就不重要了;
    2. 微服务的优势能够弥补带来的弊端,比如业务迭代速度等;
  2. 微服务收康威定律影响比较大;
  3. 技术在不断革新,但是大家会比较理性地接受。公司规模越大,越趋于选择成熟的技术;
  4. 容器已经是大势,需要掌握。

技术不断发展,我们需要学习的东西越来越多,很多时候感觉学不动了。但既然选择了这个行业,拿着高于其他行业的薪资,也承担着各种裁员的风险,总归是要有一些技能傍身,才不至于被历史的车轮碾成粉末。

青山不改,绿水长流,我们下次见。

参考

  • https://www.i-programmer.info/news/80-java/15317-wheres-java-going-in-2022.html
  • https://www.jrebel.com/resources/java-developer-productivity-report-2022

推荐阅读

  • 一文掌握 Java8 Stream 中 Collectors 的 24 个操作
  • 一文掌握 Java8 的 Optional 的 6 种操作
  • 使用 Lambda 表达式实现超强的排序功能
  • Java8 的时间库(1):介绍 Java8 中的时间类及常用 API
  • Java8 的时间库(2):Date 与 LocalDate 或 LocalDateTime 互相转换
  • Java8 的时间库(3):开始使用 Java8 中的时间类
  • Java8 的时间库(4):检查日期字符串是否合法
  • Java8 的新特性
  • Java9 的新特性
  • Java10 的新特性
  • Java11 中基于嵌套关系的访问控制优化
  • Java11 的新特性
  • Java12 的新特性
  • Java13 的新特性
  • Java14 的新特性
  • Java15 的新特性
  • Java16 的新特性
  • Java17 的新特性
  • 从小工到专家的 Java 进阶之旅


你好,我是看山。游于码界,戏享人生。如果文章对您有帮助,请点赞、收藏、关注。我还整理了一些精品学习资料,关注公众号「看山的小屋」,回复“资料”即可获得。

个人主页:https://www.howardliu.cn
个人博文:2022 年 Java 行业分析报告
CSDN 主页:https://kanshan.blog.csdn.net/
CSDN 博文:2022 年 Java 行业分析报告

👇🏻欢迎关注我的公众号「看山的小屋」,领取精选资料👇🏻


---------------------
作者:看山
来源:CSDN
原文:https://blog.csdn.net/liuxinghao/article/details/125356270
版权声明:本文为作者原创文章,转载请附上博文链接!
内容解析By:CSDN,CNBLOG博客文章一键转载插件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/283824.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mysql 数据库学习笔记03 存储过程

一、存储过程:如下 通过 out 、inout 将结果输出,可以输出多个值。 * 调用存储过程: call 存储名称(参数1,参数2,...); 如指定参数不符合要求,返回 Empty Set * 查询存储过…

vue+vuecli+webapck2实现多页面应用

准备工作 在本地用vue-cli新建一个项目,首先安装vue-cil,命令: npm install -g vue-cli 新建一个vue项目,创建一个基于"webpack"的项目,项目名为vuedemo: vue init webpack vuedemo 这里有一个地方需要改一下&#xff0…

一文把Docker、Kubernetes搞懂:什么是Docker?什么是Kubernetes?Docker和Kubernetes有什么关系和区别?通俗解释Docker、Kubernetes

一、Docker解决的问题 1、统一标准 ● 应用构建 ○ Java、C、JavaScript——编程各异 ○ 打成软件包 ○ .exe(类似Windows,最终也只是生产exe执行) ○ 使用docker build … 打包成 镜像——这就类似于exe ● 应用分享 ○ 所有软件的镜像放到一…

程序员双手飞快敲键盘的时候是在敲代码吗?

当你看到一个程序员的两只手在键盘上上下翻飞,行云流水的时候,多半不是在敲击代码大概率是在跟产品经理撕逼讨论需求另一种可能就是在跟测试打口水仗10%几率是在论坛码字摸鱼或者和人家开喷了。1%几率是在跟MM聊天可以手速飞快而不需要停下思考的代码&am…

几分钟上线一个网站 真是神器

1、ToolJet 简介 ToolJet 是一个开源的低代码框架,可以快速构建和部署内部工具,而无需工程团队付出太多努力。您可以连接到您的数据源,例如数据库(如 PostgreSQL、MongoDB、Elasticsearch 等)、API 端点(To…

移植Python3到TQ2440(一)

平台 硬件:TQ2440 64MB内存 256MB NandFlashbootloader:U-Boot 2015.04kernel:linux-4.9Python: Python-3.6.0工具链:arm-none-linux-gnueabi-gcc 4.8.3概述 现在树莓派很火,在树莓派上面用户可以通过Python来控制板…

WinForm(六)组合布局属性

WinForm是基于控件的,不像codemark的架构,可以非常灵活的用mark来布局,它只能用控件布局属性和窗口控件来完成对UI的布局。容器控件有一组控件叫容器控件,对布局特别有作用,它们分别是:TableLayoutPanel&am…

Qt 网络编程

QT 网络编程 TCP 编程 模块引入 QT network 头文件 #include <QTcpServer> // TCP服务器端使用 #include <QTcpSocket> // TCP服务器和客户端都使用 编程流程 服务端 1&#xff09;实例化 QTcpServer 对象 -----------------------------> socket 2&#x…

日利率

2019独角兽企业重金招聘Python工程师标准>>> 利率计算 转载于:https://my.oschina.net/u/3342652/blog/1649028

Kafka 安装详解

注意&#xff1a;确保有JDK1.8版本及以上 官方文档&#xff1a;https://kafka.apache.org/quickstart 清华镜像下载&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/apache/kafka/ 首先下载安装包&#xff0c;在linux及Windows都可以使用。 1. Centos 安装部署 1.1 下载 将下…

【Maui正式版】创建可跨平台的Maui程序,以及有关依赖注入、MVVM双向绑定的实现和演示...

前言&#xff1a;Maui终于在2022年8月9日推送出来了。今儿就迫不及待来把玩一下先。A、我本地已有VS2022&#xff0c;不过版本比较老&#xff0c;此处选择更新。工具 -> 获取功能和更新里面&#xff0c;可以获取到新版本更新。B、最新版本是17.3.0&#xff0c;我本地只有17.…

WebSQL存储

2019独角兽企业重金招聘Python工程师标准>>> WebSQL这种存储技术&#xff0c;相对于学过数据库的人来说&#xff0c;还是比较容易理解和上手的&#xff0c;主要就是它的存储风格和我们一般所学的SQL Server 和Oracle比较像&#xff0c;对于HTML5来说&#xff0c;当然…

抖音服务器带宽有多大,才能供上亿人同时刷?

最近看到一个有意思的提问&#xff1a;抖音服务器带宽有多大&#xff0c;为什么能够供那么多人同时刷&#xff1f;今天来给小伙伴们科普一下。 抖音&#xff0c;百度&#xff0c;阿里云&#xff0c;腾讯都是自建的数据中心&#xff0c;都是 T 级别出口带宽&#xff08;总出口带…

ASP.NET Core 5.0中的Host.CreateDefaultBuilder执行过程

通过Rider调试的方式看了下ASP.NET Core 5.0的Web API默认项目&#xff0c;重点关注Host.CreateDefaultBuilder(args)中的执行过程&#xff0c;主要包括主机配置、应用程序配置、日志配置和依赖注入配置这4个部分。由于水平和篇幅有限&#xff0c;先整体理解、建立框架&#xf…

404和302

为什么80%的码农都做不了架构师&#xff1f;>>> 404 php中用header()函数是可以为返回页面添加404的头信息的&#xff0c;从而提示浏览器该网页找不到了。 所以可以使用&#xff1a;header("HTTP/1.0 404 Not Found");或者&#xff1a;header("Stat…

oracle sqlplus使用

2019独角兽企业重金招聘Python工程师标准>>> 1、常用连接方式 sqlplus / as sysdba 无需数据库进入可用状态&#xff0c;就可用用该命令登录&#xff0c;运行startup来启动。 sqlplus username/pwdhost/service_name&#xff0c;如&#xff1a; sqlplus tiger/scott…

20款IDEA 神级插件 效率提升 30 倍,写代码必备

插件目录 1. Alibaba Java Coding Guidelines 2.GsonFormat 3.A8Translation 4.Maven Helper 5.Free Mybatis plugin 6.Grep Console 7.Lombok 8.Nyan progress bar 9.FindBugs-IDEA 10.Key Promoter X 11.JavaDoc 12.ignore 13.RainbowBrackets 14.Activate-power-mode 15.C…

【温故知新】C# Linq中 Where使用技巧

微信公众号&#xff1a;趣编程ACE关注可了解更多的.NET日常实战开发技巧&#xff0c;如需源码 后台回复 源码 即可;如果觉得对你有帮助&#xff0c;欢迎关注C# Linq中 Where使用技巧hello 大家好&#xff0c;很开心又能重新分享C#编程开发技巧了&#xff0c;之前因为工作和生活…

分布式id解决方案

文章目录 1.分布式id实现方案 1.1.uuid1.2 数据库主键自增1.3 Redis自增1.4 号段模式1.5 雪花算法&#xff08;snowflake&#xff09; 1.5.1 百度&#xff08;uid-generator&#xff09;1.5.2 美团&#xff08;Leaf&#xff09;所谓id就是能够用作唯一标识的记号。 在我们日常的…

我和大象的十年往事 - 感恩、感谢、加油、腾飞

背景 http://www.idcquan.com/Special/OSCAR2018/index.html 由中国信息通信研究院主办、中国通信标准化协会支持的"OSCAR云计算开源产业大会"于2018年3月21日&#xff0d;22日在国家会议中心举行。 非常有幸获得了“OSCAR尖峰开源人物”奖项。 奖项不敢自居&#xf…