2022 Java生态系统报告:Java 11超Java 8、Oracle在缩水、Amazon在崛起!
近日,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在崛起!的更多相关文章
- Error:(12, 64) java: 未报告的异常错误java.io.IOException; 必须对其进行捕获或声明以便抛出
Error:(12, 64) java: 未报告的异常错误java.io.IOException; 必须对其进行捕获或声明以便抛出 package com.test; import org.apach ...
- 20175236 《Java程序设计》实验一(Java开发环境的熟悉)实验报告
一.实验报告封面 课程:Java程序设计 班级:1752班 姓名:温丰帆 学号:20175236 指导教师:娄嘉鹏 实验日期:2019年4月2日 实验时间:13:45 - 15:25 实验序号:实验一 ...
- 20175325 《JAVA程序设计》实验一 《JAVA开发环境的熟悉》实验报告
20175325 <JAVA程序设计>实验一 <JAVA开发环境的熟悉>实验报告 一.实验内容及步骤 (一).实验一: 实验要求: 0 参考实验要求 1 建立"自己学 ...
- Java实验报告一:Java开发环境的熟悉
实验要求: 1. 使用JDK编译.运行简单的Java程序 2.使用Eclipse 编辑.编译.运行.调试Java程序 实验内容 (一) 命令行下Java程序开发 (二)Eclipse下Java程序 ...
- 20155205 《Java程序设计》实验一(Java开发环境的熟悉)实验报告
20155205 <Java程序设计>实验一(Java开发环境的熟悉)实验报告 一.实验内容及步骤 (一)使用JDK编译.运行简单的java程序 命令行下的程序开发 步骤一:打开mac下的 ...
- 20165227 《Java程序设计》实验一(Java开发环境的熟悉)实验报告
20165227 <Java程序设计>实验一(Java开发环境的熟悉)实验报告 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:朱越 学号:20165227 指导教师:娄 ...
- 20155303 《Java程序设计》实验一(Java开发环境的熟悉)实验报告
20155303 <Java程序设计>实验一(Java开发环境的熟悉)实验报告 一.实验内容及步骤 (一)使用JDK编译.运行简单的java程序 命令行下的程序开发 步骤一(新建文件夹): ...
- 20155218 《Java程序设计》实验三(Java面向对象程序设计)实验报告
20155218 <Java程序设计>实验三(Java面向对象程序设计)实验报告 一.实验内容及步骤 (一)编码标准 在IDEA中使用工具(Code->Reformate Code) ...
- 20155218 《Java程序设计》实验二(Java面向对象程序设计)实验报告
20155218 <Java程序设计>实验二(Java面向对象程序设计)实验报告 一.实验内容及步骤 (一)单元测试 主要学习安装和使用junit来测试编写的程序,并学习以TDD(Test ...
随机推荐
- HTTP1.0和HTTP1.1和HTTP2.0的区别
1 HTTP1.0和HTTP1.1的区别1.1 长连接(Persistent Connection) HTTP1.1支持长连接和请求的流水线处理,在一个TCP连接上可以传送多个HTTP请求 ...
- Java使用多线程异步执行批量更新操作
import com.google.common.collect.Lists; import org.apache.commons.collections.CollectionUtils; impor ...
- Zookeeper 保证了如下分布式一致性特性?
1.顺序一致性 2.原子性 3.单一视图 4.可靠性 5.实时性(最终一致性) 客户端的读请求可以被集群中的任意一台机器处理,如果读请求在节点上注册了 监听器,这个监听器也是由所连接的 zookeep ...
- 学习GlusterFS(九)
环境说明: 3台机器安装 GlusterFS 组成一个集群. 使用 docker volume plugin GlusterFS 服务器: 10.6.0.140 10.6.0.192 10.6.0.1 ...
- Go 语言 结构体
Go 语言 结构体 引言Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型结构体是由一系列具有相同类型或不同类型的数据构成的数据集合结构体表示一项记录,比如保存图书 ...
- Netty学习摘记 —— 初步认识Netty核心组件
本文参考 我在博客内关于"Netty学习摘记"的系列文章主要是对<Netty in action>一书的学习摘记,文章中的代码也大多来自此书的github仓库,加上了一 ...
- 可想实现一个自己的简单jQuery库?(五)
Lesson-4 这个版本我们要增加一个用的非常多的方法! 那就是each! 我们知道each不仅能遍历数组,还能遍历对象. 首先我们需要一个对数组进行验证的方法 function isArray(o ...
- react 实用项目分享-mock server
使用react16+router4+mobx+koa2+mongodb做的mock平台 moapi-cli 本地工具版,一行命令 ,方便个人使用 安装 npm i moapi-cli -g 使用 mo ...
- Linux 0.11源码阅读笔记-总览
Linux 0.11源码阅读笔记-总览 阅读源码的目的 加深对Linux操作系统的了解,了解Linux操作系统基本架构,熟悉进程管理.内存管理等主要模块知识. 通过阅读教复杂的代码,锻炼自己复杂项目代 ...
- python-使用函数输出指定范围内Fibonacci数的个数
本题要求实现一个计算Fibonacci数的简单函数,并利用其实现另一个函数,输出两正整数m和n(0<m<n≤100000)之间的所有Fibonacci数的数目. 所谓Fibonacci数列 ...