近日,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. svn 清理报错

    Can't install '*' from pristine store, because no checksum is recorded for this file svn同步时,提示clean ...

  2. 什么是IOC?

    IoC是什么 Ioc-Inversion of Control,即"控制反转",不是什么技术,而是一种设计思想.在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传 ...

  3. 表单属性method的值get和post的区别?什么时候用get?什么时候用post?

    get和post的区别 一.安全性 因为get会将用户名和密码放在URL中,进而出现在浏览器的历史记录中,显然这种情况应该用post. 二.编码 get只能向服务器发送ASCII字符,而post则可以 ...

  4. Effective Java —— 用私有构造器或枚举类型强化单例属性

    本文参考 本篇文章参考自<Effective Java>第三版第三条"Enforce the singleton property with a private construc ...

  5. PIC16F877A.H头文件详细注释

    /* * Header file for the Microchip  * PIC 16F873A chip * PIC 16F874A chip * PIC 16F876A chip * PIC 1 ...

  6. H.265

    Baseline支持I/P 帧,只支持无交错(Progressive)和CAVLC一般用于低阶或需要额外容错的应用,比如视频通话.手机视频等: Main支持I/P/B 帧,无交错(Progressiv ...

  7. 所有用CSS3写的3D特效,都离不开这些知识

    起因 昨晚在做慕课网的十天精通CSS3课程,其中的综合练习是要做一个3D导航翻转的效果.非常高大上. 以往这些效果我都很不屑,觉得网上一大堆这些特效的代码,复制粘贴就好了,够快.但是现实工作中,其实自 ...

  8. 使用Javascript获取剪贴板图片的DataURL

    最近写博客需要插入一些截图,想着用DataURL会方便点,于是需要一个把图片转成DataURL的工具.搜索一番后发现这个功能用HTML就能实现,通过paste事件. 先尝试在Chrome上实现,Chr ...

  9. Brunch:入门上手

    在 Phoenix 项目中遇到关于 Branch 这个 HTML5 构建工具的问题, 在这里为了剥离问题的复杂度, 独立创建一个 Branch 前端项目来探索如何使用 Brunch 这个全新的前端构建 ...

  10. CSS3 用border写 空心三角箭头 (两种写法)

    之前一直在寻找这种空心三角箭头, 终于知道了原理! 自己记录一下,顺便分享给之前跟我一样想要的撸友们~ 第一种写法 利用常见的 after伪元素 <!DOCTYPE html> <h ...