近日,New Relic发布了最新的2022 Java生态系统报告,这份报告可以帮助我们深入的了解Java体系的最新使用情况,下面就一起来看看2022年,Java发展的怎么样了,还是Java 8 YYDS吗?

Java 11成为新的标准

在2020年的时候,Java 11已经推出了1年多,但当时Java 8的占有率高达84.48%。2年过去了,Java 11上生产的比例第一次超过Java 8,占有率已经达到了48.44%。曾今的霸主Java 8几乎跌掉了一半,以46.45%占据第二。

而大势所趋的、整个Java生态都在拥抱的Java 17在排行榜上还是处于比较低的位置。这个其实还是意料之中的,因为生态的支持还需要一定时间的演进,比如Spring这个Java生态的大基座,对于Java 17的重要支持还要等到今年年底的Spring Boot 3发布(对这部分感兴趣的小伙伴记得关注我,公众号程序猿DD,长期分享这块最前沿的专业解读),同时周边的其他各种框架、中间件也都要全面更上之后,才真正具备上生产的成熟度。

所以,先从Java 8到Java 11,还是一个不错的选择,小步快跑,免得到时候直接从Java 8到Java 17,步子太大,扯到x就不好了...

我正在连载Java 8之后的新特性解读,这次一改之前的博客风格,采用文档(https://www.didispace.com/java-features/)+ 视频(B站、视频号)的方式编写,阅读与学习体验更加。感兴趣的小伙可以关注收藏起来,能转发分享下那是更好,这样更有更新的动力。

最流行的非LTS版本:Java 14

从Java 9开始,Java版本的发布模式发生了变化。每隔6个月就会有一个新版本发布,但这些版本只在下一个版本之前受到官方支持。这样做的目的是让新功能更频繁可用。

但是,与生产中的LTS版本相比,这些临时的非LTS版本使用率一直都非常低,只有2.7%的应用程序在使用。

虽然像Azul Systems这样的一些供应商在一些非LTS版本上提供了补丁,但大多数的供应商没有这么做。这可能是为什么大家不愿意使用的原因。在非LTS Java版本中,Java 14最受欢迎。

Oracle在缩水,Amazon在崛起

这次的报告中,值得关注的是JDK发行版的变化。虽然大部分开发人员还是会从Oracle获得JDK,而OpenJDK项目中的开源内容已经产生了丰富的选择。

上图显示了Oracle在对其JDK 11发行版进行更严格的许可证控制之后(在使用Java 17返回到更开放的立场之前)的变化。2020年的时候,Oracle以绝对优势(约占Java市场的75%)成为最受欢迎的供应商。2年过去了,虽然他们依然还是头把交椅,但他们的份额已经减少了一半。而Amazon的市场占有率从2020年的2.18%大幅攀升至22%。

从2021年11月以来,还有一些有趣的变化:在Java 17发布之前,Eclipse Adoptium和Amazon在这份榜单上几乎处于完全相反的位置。

容器中的资源分配

计算资源的配置

容器会影响人们分配计算和内存资源的方式。这份报告中的数据显示,在容器中运行的应用程序中,少于四个核心的应用程序所占的比例要高得多。

在人们经常部署容器的云环境中,小规模运行的驱动力很有意义。但这一趋势可能会给一些应用程序带来意想不到的问题。比如:当运行的内核少于2个时,在最近JVM上使用默认的G1垃圾收集器所带来的许多并发好处就消失了。所有这些单核实例可能都在使用串行收集器,并为此付出了性能代价,但许多人可能甚至不知道这一点。

内存资源的配置

在比较内存设置时,也会出现类似的趋势,它们倾向于给容器中的实例分配更小的内存。

该报告中显示,只有大约80%的容器化应用程序通过-XMX或-XX:MaxRAMPercentage标志显式请求JVM内存上限。从Java 9开始,JVM中的容器感知功能意味着这可能不会像过去那样对这些应用程序造成安全问题,只要JVM是每个容器中运行的唯一进程。

最常用的垃圾收集算法

垃圾收集(GC)算法在JVM性能中起到核心作用,所以这块一直以来都是社区讨论最多的话题。新的数据显示,在Java 8之后,垃圾收集器的使用发生了明显的变化。

G1的总体受欢迎程度非常高。考虑到Java 11和更高版本上的G1收集器具有更新的默认设置和更高的性能,所以这一结果这并不令人惊讶。

原始报告我放到公众号里了,对细节内容感兴趣的话,可以在公众号中发送关键词:relic-java-2022,获取完整报告。

好了,今天的分析那个就到这里!如果您学习过程中如遇困难?可以加入我们超高质量的Spring技术交流群,参与交流与讨论,更好的学习与进步!

欢迎关注我的公众号:程序猿DD。第一时间了解前沿行业消息、分享深度技术干货、获取优质学习资源

2022 Java生态系统报告:Java 11超Java 8、Oracle在缩水、Amazon在崛起!的更多相关文章

  1. Error:(12, 64) java: 未报告的异常错误java.io.IOException; 必须对其进行捕获或声明以便抛出

    Error:(12, 64) java: 未报告的异常错误java.io.IOException; 必须对其进行捕获或声明以便抛出 package com.test; import org.apach ...

  2. 20175236 《Java程序设计》实验一(Java开发环境的熟悉)实验报告

    一.实验报告封面 课程:Java程序设计 班级:1752班 姓名:温丰帆 学号:20175236 指导教师:娄嘉鹏 实验日期:2019年4月2日 实验时间:13:45 - 15:25 实验序号:实验一 ...

  3. 20175325 《JAVA程序设计》实验一 《JAVA开发环境的熟悉》实验报告

    20175325 <JAVA程序设计>实验一 <JAVA开发环境的熟悉>实验报告 一.实验内容及步骤 (一).实验一: 实验要求: 0 参考实验要求 1 建立"自己学 ...

  4. Java实验报告一:Java开发环境的熟悉

    实验要求: 1. 使用JDK编译.运行简单的Java程序 2.使用Eclipse 编辑.编译.运行.调试Java程序 实验内容 (一)   命令行下Java程序开发 (二)Eclipse下Java程序 ...

  5. 20155205 《Java程序设计》实验一(Java开发环境的熟悉)实验报告

    20155205 <Java程序设计>实验一(Java开发环境的熟悉)实验报告 一.实验内容及步骤 (一)使用JDK编译.运行简单的java程序 命令行下的程序开发 步骤一:打开mac下的 ...

  6. 20165227 《Java程序设计》实验一(Java开发环境的熟悉)实验报告

    20165227 <Java程序设计>实验一(Java开发环境的熟悉)实验报告 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:朱越 学号:20165227 指导教师:娄 ...

  7. 20155303 《Java程序设计》实验一(Java开发环境的熟悉)实验报告

    20155303 <Java程序设计>实验一(Java开发环境的熟悉)实验报告 一.实验内容及步骤 (一)使用JDK编译.运行简单的java程序 命令行下的程序开发 步骤一(新建文件夹): ...

  8. 20155218 《Java程序设计》实验三(Java面向对象程序设计)实验报告

    20155218 <Java程序设计>实验三(Java面向对象程序设计)实验报告 一.实验内容及步骤 (一)编码标准 在IDEA中使用工具(Code->Reformate Code) ...

  9. 20155218 《Java程序设计》实验二(Java面向对象程序设计)实验报告

    20155218 <Java程序设计>实验二(Java面向对象程序设计)实验报告 一.实验内容及步骤 (一)单元测试 主要学习安装和使用junit来测试编写的程序,并学习以TDD(Test ...

随机推荐

  1. 简述synchronized和java.util.concurrent.locks.Lock的异同 ?

    主要相同点:Lock能完成synchronized所实现的所有功能 主要不同点:Lock有比synchronized更精确的线程语义和更好的性能.synchronized会自动释放锁,而Lock一定要 ...

  2. Collection框架中实现比较要实现什么接口?

    Java集合框架中需要比较大小的集合包括TreeMap.TreeSet,其中TreeMap会根据key-value对中key的大小进行排序,而TreeSet则会对集合元素进行排序. 因此TreeMap ...

  3. kafka 如何不消费重复数据?比如扣款,我们不能重复的扣?

    其实还是得结合业务来思考,我这里给几个思路: 比如你拿个数据要写库,你先根据主键查一下,如果这数据都有了,你就别插入 了,update 一下好吧. 比如你是写 Redis,那没问题了,反正每次都是 s ...

  4. Ribbon负载均衡能干什么?

    (1)将用户的请求平摊的分配到多个服务上 (2)集中式LB即在服务的消费方和提供方之间使用独立的LB设施(可以是硬件,如F5, 也可以是软件,如nginx), 由该设施负责把访问请求通过某种策略转发至 ...

  5. 使用redis作为django缓存数据库

    1.Redis的Windows版本.打开https://github.com/MSOpenTech/redis/releases下载msi安装包.该版本是64位.安装msi过程中,有个选项是否加入系统 ...

  6. Replicated State Machine和WAL

    在阅读raft论文的时候,考虑两个问题: 为什么要用Replicated State Machine?没有其他方式吗 为什么要先写日志再应用到Replicated State Machine,直接应用 ...

  7. memcached 能够更有效地使用内存吗?

    Memcache 客户端仅根据哈希算法来决定将某个 key 存储在哪个节点上,而不考 虑节点的内存大小.因此,您可以在不同的节点上使用大小不等的缓存.但是一 般都是这样做的:拥有较多内存的节点上可以运 ...

  8. java-网络通信--socket实现多人聊天(基于命令行)

    先编写最简答的服务器 思路 1编写一个实现Runnable接口的静态内部类 ServerC,便于区分每个客户端 1.1 获取客户端数据函数 public String remsg() 1.2 转发消息 ...

  9. 学习SVN03

    SVN版本控制系统最佳实践   第1章SVN介绍及应用场景 1.1什么是SVN(Subversion) Svn(subversion)是近年来崛起非常优秀的版本管理工具,与CVS管理工具一样,SVN是 ...

  10. Architecture Review Board

    Architecture Review Board What's an Architecture Review? Architecture design is not a one-time final ...