【方向盘】逐渐碎片化的Java生态圈:Oracle JDK、OpenJDK、阿里Dragonwell、华为毕昇

简介: Oracle JDK开始收费后,我们还能用什么?

在这里插入图片描述

Oracle JDK开始收费后,我们还能用什么?
本文已被https://yourbatman.cn收录;女娲Knife-Initializr工程可公开访问啦;程序员专用网盘https://wangpan.yourbatman.cn;技术专栏源代码大本营:https://github.com/yourbatman/tech-column-learning;公号后台回复“专栏列表”获取全部小而美的原创技术专栏

你好,我是方向盘(YourBatman)

📚前言

随着Oracle宣布“Oracle JDK商用收费”,Red Hat、AWS、Alibaba、Tencent宣布加入开源OpenJDK阵营,结果是:Java生态圈日趋碎片化,越来越明显。而再此之前,官方的Oracle JDK呈现近乎垄断趋势。如下图所示

这是2018年的JVM生态报告数据:Oracle JDK占超7成市场份额
在这里插入图片描述
这是2021年的JVM生态报告数据:Oracle JDK市场份额萎缩了非常非常多
在这里插入图片描述
国际不少主流厂商都在使用OpenJDK,比如 Google、Twitter、Amazon 和阿里巴巴,并研发了基于此构建的 JDK 版本。选择多了,生态似乎更“碎”了,为了减少对碎片化问题的潜在担忧,AdoptOpenJDK曾强烈鼓励所有OpenJDK提供商将补丁提交给 OpenJDK统一管理,但很明显这没有能成为现实。

Java 这么多年发展过来,大多数开发者已经习惯信任官方Oracle JDK,对社区OpenJDK 版本关注不够,所以从 Oracle JDK 到 OpenJDK 的切换需要一个过程。随着这些国际科技大厂的努力,OpenJDK的生态一定会越来越完善。

站在2022年档口看这个问题,作为一名Java开发者,有必要且必须对OpenJDK有所了解和熟悉了,毕竟你的公司可能大概率不愿意为Oracle JDK而付费,公司越大越是如此。
在这里插入图片描述

🚩所属专栏

🚩相关下载

🚩版本约定

  • JDK 8/11/17
  • Open JDK 8/11/17

    ✍正文

    随着Oracle JDK市场份额越来越低,OpenJDK的重要性日趋凸显。但是不同于Oracle JDK那么“单纯好理解”,OpenJDK生态可谓丰富多彩非常热闹,自然也增加了我们的理解成本。

一会微软加入OpenJDK阵营,一会Alibaba的“龙井JDK”开源,一会AWS宣布免费支持JDK 8至少5年... 这都什么意思?和OpenJDK有什么关系?本文就来帮你解答这些疑问

🌈基础知识

在详细介绍各种OpenJDK之前,首先当然是要做些基础知识的普及,即使这些知识你已知晓。

🚀什么是JDK

JDK(Java Development Kit) 是Java语言的软件开发工具包(SDK)。JDK是整个java开发的核心,它包含了Java的运行环境(JRE = JVM + Java核心类库)和Java工具。
在这里插入图片描述
没有JVM,Java程序无法运行;
没有Java核心类库,Java就是无根之木,无源之水;
没有Java开发/运维/监控工具,Java源码就无法编译成字节码、没法监控。

🚀什么是Oracle JDK

Java毫无疑问是IT行业最重要的发明之一。1996年1月,Sun公司发布了Java的第一个开发工具包,我们称它为Sun JDK。2009年,甲骨文(Oracle)公司宣布收购Sun公司,从此更名为Oracle JDK。

Oracle JDK就是Sun JDK,持有Java商标,代表着Java官方

https://www.oracle.com/java/technologies/downloads 这个下载页面,也被称作官方下载页面,Java开发者一定不陌生:
在这里插入图片描述
关于Oracle JDK开始收费:从2009年Oracle收购Sun公司,当时就有不少人开始担心Java收费的问题了。果不其然,这一天来了:时隔10年,Oracle于2019年4月16号宣布JDK开始商用收费,JDK从8u211版本开始。

Tips:8u211以下版本(比如JDK 8u210)不升级就不收费,升级但不商用也不收费

2021年9月,Oracle在发布Java 17时,开始提供一个不收费的许可模式(NFTC协议地址:https://www.oracle.com/downloads/licenses/no-fee-license.html),该许可会在三年内免费提供季度更新。但该模式只限于该版本的迭代,允许用户免费使用,甚至包括商业用途(不能与付费产品捆绑在一起),而不适用于 Java 7、8和11等早期版本,这就是口口相传的Java 17开始“免费”了。

Tips:好好阅读Oracle的收费规则、条款,会发现真tm套路多

市场上对 Java使用有很多混乱的地方,Oracle JDK收费还是不收费,几句话没法说清楚。总而言之,言而总之,不管你使用的是哪一个版本,只要你是从Oracle的网站上下载补丁和更新,那就得需要一个支持许可证,就(可能)需要收费。

Oracle号称是一个律师公司,在收费、打官司这一块,还没怕过谁。谨慎使用,特别对于大公司

🚀什么是OpenJDK

官方地址:http://openjdk.java.net

OpenJDK是开源协议,拥有自由的再分发权,可以在发行的软件中直接内置一份OpenJDK,比如Intellij IDEA,以及JetBrain全家桶等软件都是内置OpenJDK的,而Oracle JDK是不能再分发和内置的,必须去单独下载。

OpenJDK根据许可证GPL v2发布;Oracle JDK根据Oracle二进制代码许可协议获得许可

在这里插入图片描述
2006年Sun公司在JavaOne大会上宣布将Java开源,并于2009年4月15日正式发布OpenJDK,这就是OpenJDK。从Java 7开始,OpenJDK就是Java SE的开源实现,他由SUN和Java社区提供支持,2009年Oracle收购了Sun公司,自此Oracle成为OpenJDK最主要的管理者之一。

所以,OpenJDK其实也叫做Oracle OpenJDK

OpenJDK是由OpenJDK Community 、Oracle、IBM领导,连同 Alibaba,Amazon,Ampere,Azul,BellSoft,Canonical,Fujitsu,Google,Huawei,Intel,Java Community,JetBrains,London Java Community,Microsoft,Red Hat,SAP,SouJava,SUSE,Tencent,Twitter ,VMWare 等第三方共同开发、维护的 Java SE 开源参考实现。

OpenJDK Community领导的OpenJDK Project是Java SE 的官方参考实现(也就是Oracle OpenJDK),只产生 OpenJDK源码,并不提供可以直接使用的二进制文件格式。现在能直接使用的二进制文件格式的JDK都是被编译之后的程序。OpenJDK 官网指向的可下载二进制文件的地址,实际是Oracle’s OpenJDK下载的地址,它也是被 Oracle 编译后的版本。

在代码管理上,OpenJDK从2008年起一直使用Mercurial作为源代码管理解决方案,于2020年9月全部迁移至GitHub,地址为:https://github.com/openjdk/jdk。切换至Git代码版本控制系统的部分预期目的是提升性能和对代码审查的更好支持。

🚀Oracle JDK和OpenJDK的区别?

Open JDK和Oracle JDK都来自Sun公司,JVM都是HotSpot VM,从源码层面说,两者基本上是同一个东西。只有非常非常少量的功能在Oracle JDK里有二Open JDK没有,且这些不涉及JVM的核心(比如Java Flight Recorder)。

简单理解:OpenJDK是开源的,Oracle JDK是官方的。另外,Oracle JDK只发布二进制安装包,而OpenJDK只发布源码。自Java SE 7开始往后的版本,所有的JDK都源自于OpenJDK。所以严格意义上来说Oracle JDK也是Open JDK 的一个发行版而已。

Oracle JDK持有Java商标,可以使用它以及宣传它,而OpenJDK不能使用Java商标(关键字)。这一点从java -version里能看出来:
在这里插入图片描述
对于OpenJDK,听过阿里JDK、腾讯JDK、IBM JDK、微软JDK,这些都是啥啥啥呢?

🌈OpenJDK发行版

OpenJDK builds,也叫OpenJDK发行版。“发行版”这三个字咱熟悉啊,是的,它与其它JDK的关系就和Linux与它的众多发行版(如CentOS、Ubuntu等)是一样一样的。所有的JDK都源自于OpenJDK。所以严格意义上来说Oracle JDK也是Open JDK 的一个发行版而已。

目前而言,所有的OpenJDK发行版都是OpenJDK的下游

在这里插入图片描述
OpenJDK是开源的,任何人都可以获取该源码,并通过源码构建一个变种发布到网络上。当然喽,为了避免乱象、误导人,发布前需要一个独特的认证程序来确保这个“变种”是靠谱的,它就是JCP的技术兼容性工具包,也就是大名鼎鼎的TCK

关于JCP,笔者前面写的这篇文章非常赞:阿里巴巴入选的JCP最高执行委员会,何方神圣?

如果“变种”通过了TCK的兼容性测试,那么可以认为它是兼容Java SE的JDK,可用于生产环境商用。注意:只是兼容Java SE,但不能使用Java商标哦。至于“变种”的取名,随意~

制作“变种”的过程中,可以添加一些额外的标记或实用程序。但特别注意不要影响TCK测试以及JCP的认证程序。例如,“变种”不能为API添加新的公共方法,或者其它语言级别的特性。

就开发者而言,目前OpenJDK的选择越来越多,这不见得一定是件坏事。并且,不同版本之间的兼容性其实非常高,迁移成本几乎为零,这不会给用户使用造成额外负担。不同的版本在性能优化、平台支持等方面确实存在些许差异,开发者可以根据需要进行选择。

🚀OpenJDK发行版概览

笔者这里以2021年JVM生态报告中的JDK部分为例,了解下比较常见的OpenJDK发行版。
在这里插入图片描述

发行版 LTS 未改上游的构建 TCK测试 宽松式许可证 商业支持
AdoptOpenJDK 可选 通过 可选(IBM)
Eclipse Temurin 可选 通过 可选(IBM)
Oracle OpenJDK 通过
Oracle Java SE 通过
Azul Zulu 通过 可选
Amazon Corretto 通过 可选(AWS)
Linux发行版捆绑的 通过
Red Hat OpenJDK 通过
Oracle GraalVM CE 通过
IBM Java SDK 通过
Alibaba Dragonwell 通过
Tencent Kona 通过
Huawei Bisheng 通过

Tips:商业支持表示可由公司提供商业付费服务

可以看到发行版的OpenJDK大部分都是可以免费商用的,商用付费的代表是Oracle JDK和IBM、RedHat的OpenJDK。

接下来,详细的了解下这些发行版OpenJDK。

🚀AdoptOpenJDK / Eclipse Temurin

官网:https://adoptopenjdk.net
在这里插入图片描述
AdoptOpenJDK是一个开放的,完全无品牌的,社区主导的OpenJDK,它提供了来自OpenJDK的Java平台参考实现的免费、预构建的二进制文件。AdoptOpenJDK的发展方向由个人开发者主导,保持中立,不受制于商业公司,由专门的技术指导委员会来确保这一点,从而确保定期更新可供所有人跨平台免费使用。

它的特点是涵盖了最全面的操作系统和体系结构,使用AdoptOpenJDK二进制文件可以确信它在所有环境中的构建和测试都完全相同。

AdoptOpenJDK社区非常活跃,有大量不同的测试可供使用,以验证每个构建的质量,从而确保应用程序按预期运行和运行。很多世界财富500强公司的JVM应用都构建在AdoptOpenJDK之上,足矣见得其可靠性

除此之外,它还提供了两种虚拟机实现:HotSpot(基于标准OpenJDK构建)和OpenJ9(支持IBM的J9 JVM虚拟机),前者更成熟稳定,后者占用资源更少、启动更快,更适合容器化。

🚩下载量

AdoptOpenJDK​ 已经取得了巨大成功,得到了广大开发者的青睐,特别是​Oracle JDK​ 更改商业授权协议以后。

在这里插入图片描述

🚩加入Eclipse基金会

每一个开源项目发展的过程中都会做出一些抉择和判断,以保证项目的独立性和长寿性。随着AdoptOpenJDK成了规模,需要管理、后勤、法律合规性都得跟进,经研究后, 2020年6月19日最终选择了加入Eclipse基金会。​Eclipse 基金会​对Java​ 生态中有着悠久的历史和丰富的经验,成功的管理了很多知名项目,可以提供专业营销,品牌保护和法律支持。

加入Eclipse基金会后,就得有品牌喽,这才好宣传。因此启用了新的名称:Eclipse Adoptium,同时官网也从https://adoptopenjdk.net 迁移到 https://adoptium.net

🚀Oracle OpenJDK

官网:http://openjdk.java.net

它就是OpenJDK本K。

🚀Azul Zulu

官网:https://www.azul.com

Zulu是OpenJDK的免费版本,但同时提供商业付费支持。当然,即使不付费,也可以得到免费的社区支持。Azul为此有一个广泛的计划以支持Zullu的商业化,所以还是比较靠谱的,更新也很快很及时。

🚀Amazon Corretto

官网:https://aws.amazon.com/cn/corretto

Amazon Corretto 是OpenJDK的免费、多平台、生产就绪型发行版。Corretto 提供长期支持,其中包括性能增强和安全修复。Amazon在内部的数千种生产服务上运行 Corretto,并且 Corretto 已被证明能够兼容 Java SE 标准。借助 Corretto,您可以在常用操作系统(包括 Linux、Windows 和 macOS)上开发和运行 Java 应用程序。

🚀Linux发行版捆绑的

也就是在Linux操作系统里,可通过内置的yum源/apt源直接安装的OpenJDK,不太建议直接运用在生产环境。

原生Linux系统,CentOS 7.8 64位捆绑的OpenJDK:
在这里插入图片描述
Alibaba Cloud Linux 3.2104 64位捆绑的OpenJDK:dragonwell是阿里夹带的私货,可以免费商用
在这里插入图片描述

🚀Red Hat OpenJDK

官网:https://developers.redhat.com/products/openjdk/download

一句“红帽出品,必属精品”就能感受到此JDK的实力。仅支持Linux和Windows版本安装。

🚀Oracle GraalVM CE

官网:https://www.graalvm.org

GraalVM被称作下一代虚拟机,也是一个通用的虚拟机,可以运行用JavaScript、Pytho n、Ruby、R、JVM等语言编写的应用程序,GraalVM消除了编程语言之间的隔离,并在共享运行时启用互操作性。它可以独立运行,也可以在OpenJDK、Node.js或Oracle数据库的上下文中运行。
在这里插入图片描述
GraalVM技术值得关注,云原生时代,Native技术越来越火热,GraalVM可能会逐渐走向舞台中央。云原生框架QuarkusMicronaut都很有潜力,当然Spring也不示弱:Spring Native + GraalVM可以让一个普通的Spring Boot应用在100ms内启动,并且还节约内存。

🚀IBM Java SDK

官网:https://www.ibm.com/support/pages/java-sdk

IBM为Java 8及更早版本提供并支持 JDK。他们还使用 OpenJ9 为 Adopt Open JDK 构建提供商业付费支持。

🚀Microsoft Build of OpenJDK™

官网:https://www.microsoft.com/openjdk
代码库地址:https://github.com/microsoft/openjdk

微软做(任何)软件,都是一股不可忽视的力量。它是开源免费的,可以用在任何地方。支持Windows、macOS、Linux三大平台,同时还支持arm架构(如苹果的M1处理器)。

🚀国产OpenJDK

2019年3月:阿里巴巴宣布重磅开源OpenJDK长期支持版本Alibaba Dragonwell
2019年11月:腾讯宣布开源OpenJDK长期支持版本Tencent Kona
2020 年9月:华为宣布开源OpenJDK长期支持版本Huawei Bisheng

一下子,国产OpenJDK好似热闹。这三个大厂开源的OpenJDK各具特点:

  • Alibaba Dragonwell:针对在线电子商务、金融和物流应用程序进行了优化
  • Tencent Kona:在云场景的支撑及特性进行了开发及优化,使其更加适合云场景下的 Java 业务
  • Huawei Bisheng:做了大量稳定性增强功能,并针对ARM架构做了大幅性能优化

目前,三者的start数量为(只统计8版本):

  • Alibaba Dragonwell:3.5k
  • Tencent Kona:765
  • Huawei Bisheng:419

“用脚”投票,在Java领域,开发者严重的权威还是阿里巴巴。还有个小细节,只有Alibaba Dragonwell拥有专属域名的官网以及Logo,其它哥俩只有Github/Gitee。

🚩Alibaba Dragonwell

官网:https://dragonwell-jdk.io
在这里插入图片描述
“Dragonwell”中文译为龙井,象征着中国的茶文化,又恰好是杭州特色(阿里巴巴总部所在地);“well”一词通常被描述为水源汇聚在一起供大家享用,希望可以集合所有开发者的力量不断完善该项目并最终贡献给所有用户。

支持的版本、平台如下图所示:
在这里插入图片描述
Alibaba Dragonwell是OpenJDK在生产环境的可靠替代品,是一款免费的, 生产就绪型Open JDK 发行版,提供长期支持,包括性能增强和安全修复。阿里巴巴拥有最丰富的Java应用场景,覆盖电商,金融,物流等众多领域,世界上最大的Java用户之一。Alibaba Dragonwell作为Java应用的基石,支撑了阿里经济体内所有的Java业务。

🚩Tencent Kona

官网:https://github.com/Tencent/TencentKona-8

腾讯Kona是Open Java Development Kit (OpenJDK)的无成本、可生产的发行版,长期支持(LTS),每季度更新一次。腾讯公司不以Java著称,但没想到对OpenJDK的贡献却国内第一:
在这里插入图片描述

Kona是腾讯内部默认的JDK,为极端规模的大数据、机器学习和云计算工作负载而优化。它还被用来构建和维护腾讯支持的OpenJDK版本,供希望使用OpenJDK运行其应用程序的腾讯客户和合作伙伴使用。

目前仅支持Linux/x86_64平台

🚩Huawei Bisheng

官网:https://gitee.com/openeuler/bishengjdk-8

“毕昇”的源码托管在国产的Gitee里,Github上只做镜像定期同步,华为不愧为国产拥护者呀。

毕昇JDK是华为内部OpenJDK定制版Huawei JDK的开源版本,是一个高性能、可用于生产环境的OpenJDK发行版。Huawei JDK运行在华为内部500多个产品上,积累了大量使用场景和java开发者反馈的问题和诉求,解决了业务实际运行中遇到的多个问题,并在ARM架构上进行了性能优化,毕昇JDK运行在大数据等场景下可以获得更好的性能。毕昇JDK 8与Java SE标准兼容,

目前支持Linux/AArch64、Linux/x86_64平台。毕昇JDK同时是OpenJDK的下游,现在和未来也会持续稳定为OpenJDK社区做出贡献。

🍞总结

本篇文章是不是能让你长见识?毕竟,“龙井”和“毕昇”在本文有了联系,竟然是因为JDK。

2021年JVM生态技术报告可以发现趋势:OpenJDK 越来越多地被使用,开始成为主流选择。目前国际、国内各大互联网公司纷纷都开源了自己的JDK,趋势不可挡,不付费就必须拥抱OpenJDK。

推荐阅读

在这里插入图片描述

我是方向盘(YourBatman):前25年不会写Hallo World、早已毕业的大龄程序员。高中时期《梦幻西游》骨灰玩家,网瘾失足、清考、延期毕业、房产中介、保险销售、送外卖...是我不可抹灭的黑标签

  • 🎓2013.07 清考、毕业答辩3次未通过、延期毕业
  • 🏷2013.08-2014.07 宁夏中介公司卖二手房1年,毕业后第1份工作
  • ️️🏷2014.07-2015.05 荆州/武汉,泰康人寿卖保险3月、饿了么送外卖2月,还有炸鸡排、直销等第2345份工作
  • 🏷2015.08 开始从事Java开发,闯过外包,呆过大厂!擅长抽象思维,任基础架构团队负责人
  • 🏷2021.08 因“双减政策”失业!历经9面,终获美团外卖L8的offer
  • 🙅🏻‍♀️Java架构师、Spring开源贡献者、CSDN博客之星年度Top 10、领域建模专家、写作大赛1/2届评委
  • 📚高质量代码、规范践行者;DDD领域驱动深度实践;即将出版书籍《Spring奇淫巧技》

在这里插入图片描述
序号 | 专栏名称 | 简介
-------- | ----- | -----
01 | 【方向盘】-程序人生 | 程序人生,人生程序
02 | 【方向盘】-资讯/新特性 | IDEA、JDK、Spring技术栈......新特性
03 | 【方向盘】-IntelliJ IDEA | 熟练使用IDEA就相当拥有物理外挂,助你高效编码
04 | 【方向盘】-Bean Validation | 熟练掌握数据校验,减少90%的垃圾代码
05 | 【方向盘】-日期时间 | 帮你解决JDK Date、JSR 310日期/其实 的一切问题
06 | 【方向盘】-Spring类型转换 | Spring类型转换-框架设计的基石
07 | 【方向盘】-Spring static | static关键字在Spring里的应用
08 | 【方向盘】-Cors跨域 | 关于跨域请求问题,本专栏足矣
09 | 【方向盘】-Jackson | Almost Maybe是最好的Jackson专栏
10 | 【方向盘】-Spring配置类 | 专讲@Configuration配置类,你懂的
11 | 【方向盘】-Spring技术栈 | 暂无所属小分类的,Spring技术栈大分类
12 | 【方向盘】-JDK | 暂无所属小分类的,JDK技术栈大分类
13 | 【方向盘】-Servlet | Servlet规范、Web相关内容专题
14 | 【方向盘】-Java EE | 从Java EE到Jakarta EE,30年弹指一挥间
15 | 【方向盘】-工具/提效 | 开发工具、软件工具,目标是提效
16 | 【方向盘】-Spring技术栈新特性 | Spring Framework、Spring Boot、Spring Cloud、Spring其它技术
17 | 【方向盘】-基本功 | 每个Javaer,都需要有扎实的基本功
... | ... | ...
99 | 源代码库 | 大多数专栏均配有源代码,都在这里

目录
相关文章
|
2月前
|
Java Linux
java基础(3)安装好JDK后使用javac.exe编译java文件、java.exe运行编译好的类
本文介绍了如何在安装JDK后使用`javac.exe`编译Java文件,以及使用`java.exe`运行编译好的类文件。涵盖了JDK的安装、环境变量配置、编写Java程序、使用命令行编译和运行程序的步骤,并提供了解决中文乱码的方法。
65 2
|
13天前
|
安全 Java 编译器
JDK 10中的局部变量类型推断:Java编程的简化与革新
JDK 10引入的局部变量类型推断通过`var`关键字简化了代码编写,提高了可读性。编译器根据初始化表达式自动推断变量类型,减少了冗长的类型声明。虽然带来了诸多优点,但也有一些限制,如只能用于局部变量声明,并需立即初始化。这一特性使Java更接近动态类型语言,增强了灵活性和易用性。
95 53
|
6天前
|
IDE Java 编译器
开发 Java 程序一定要安装 JDK 吗
开发Java程序通常需要安装JDK(Java Development Kit),因为它包含了编译、运行和调试Java程序所需的各种工具和环境。不过,某些集成开发环境(IDE)可能内置了JDK,或可使用在线Java编辑器,无需单独安装。
|
17天前
|
Java 开发者
在Java多线程编程的世界里,Lock接口正逐渐成为高手们的首选,取代了传统的synchronized关键字
在Java多线程编程的世界里,Lock接口正逐渐成为高手们的首选,取代了传统的synchronized关键字
44 4
|
1月前
|
缓存 Java Maven
java: 警告: 源发行版 11 需要目标发行版 11 无效的目标发行版: 11 jdk版本不符,项目jdk版本为其他版本
如何解决Java项目中因JDK版本不匹配导致的编译错误,包括修改`pom.xml`文件、调整项目结构、设置Maven和JDK版本,以及清理缓存和重启IDEA。
48 1
java: 警告: 源发行版 11 需要目标发行版 11 无效的目标发行版: 11 jdk版本不符,项目jdk版本为其他版本
|
26天前
|
设计模式 Java API
[Java]静态代理与动态代理(基于JDK1.8)
本文介绍了代理模式及其分类,包括静态代理和动态代理。静态代理分为面向接口和面向继承两种形式,分别通过手动创建代理类实现;动态代理则利用反射技术,在运行时动态创建代理对象,分为JDK动态代理和Cglib动态代理。文中通过具体代码示例详细讲解了各种代理模式的实现方式和应用场景。
23 0
[Java]静态代理与动态代理(基于JDK1.8)
|
1月前
|
Java
让星星⭐月亮告诉你,jdk1.8 Java函数式编程示例:Lambda函数/方法引用/4种内建函数式接口(功能性-/消费型/供给型/断言型)
本示例展示了Java中函数式接口的使用,包括自定义和内置的函数式接口。通过方法引用,实现对字符串操作如转换大写、数值转换等,并演示了Function、Consumer、Supplier及Predicate四种主要内置函数式接口的应用。
27 1
|
1月前
|
Java
Java基础之 JDK8 HashMap 源码分析(中间写出与JDK7的区别)
这篇文章详细分析了Java中HashMap的源码,包括JDK8与JDK7的区别、构造函数、put和get方法的实现,以及位运算法的应用,并讨论了JDK8中的优化,如链表转红黑树的阈值和扩容机制。
26 1
|
1月前
|
Java 开发者
在 Java 多线程编程中,Lock 接口正逐渐取代传统的 `synchronized` 关键字,成为高手们的首选
【10月更文挑战第6天】在 Java 多线程编程中,Lock 接口正逐渐取代传统的 `synchronized` 关键字,成为高手们的首选。相比 `synchronized`,Lock 提供了更灵活强大的线程同步机制,包括可中断等待、超时等待、重入锁及读写锁等高级特性,极大提升了多线程应用的性能和可靠性。通过示例对比,可以看出 Lock 接口通过 `lock()` 和 `unlock()` 明确管理锁的获取和释放,避免死锁风险,并支持公平锁选择和条件变量,使其在高并发场景下更具优势。掌握 Lock 接口将助力开发者构建更高效、可靠的多线程应用。
25 2
|
2月前
|
Oracle Java 关系型数据库
Linux下JDK环境的配置及 bash: /usr/local/java/bin/java: cannot execute binary file: exec format error问题的解决
如果遇到"exec format error"问题,文章建议先检查Linux操作系统是32位还是64位,并确保安装了与系统匹配的JDK版本。如果系统是64位的,但出现了错误,可能是因为下载了错误的JDK版本。文章提供了一个链接,指向Oracle官网上的JDK 17 Linux版本下载页面,并附有截图说明。
Linux下JDK环境的配置及 bash: /usr/local/java/bin/java: cannot execute binary file: exec format error问题的解决

推荐镜像

更多
下一篇
无影云桌面