All posts by XM

OpenJDK、Temurin、GraalVM…Java到底该装哪个?

Oracle JDK要收费?Temurin、Corretto又是什么?别再为选哪个JDK头疼了,一篇文章说清各大Java发行版的门道,顺便搞定 Java 环境部署出错问题。

一个兢兢业业的程序员,刚git clone下来一个新项目,准备大展拳脚,结果上来就被现实一顿暴击——Unsupported major.minor version。得,JDK版本不对。行,切一下版本呗?结果终端里冷冰冰地甩来一句:'JAVA_HOME' not found。

血压是不是瞬间就上来了?只要是写Java的,谁没跟这破环境配错过不去啊。尤其是现在,OpenJDK、Oracle JDK、Temurin、Corretto、GraalVM……一大堆名字摆在面前,跟流量小花似的,各个看着都一样,根本分不清谁是谁。

别慌,今天我们一篇文章就把这个给捋清楚。

JDK的各个版本有什么区别

想搞明白怎么选,得先搞清楚每个JDK是什么

一切的根源:OpenJDK

zulu jdk_OpenJDK与OracleJDK区别_Java发行版选择

先聊一切的开始 —— OpenJDK。它就是Java SE的官方开源参考实现。可以把它理解成Java世界的基酒,最经典、最纯粹的主料。后面要说的一堆JDK,基本都是拿着OpenJDK的源码,自己打包,再加其他辅助材料混合成的鸡尾酒。记住,它血统最纯正,这是关键。

两大巨头:Oracle JDK vs Temurin

Java发行版选择_OpenJDK与OracleJDK区别_zulu jdk

云厂商们的特供版:Amazon Corretto

这是亚马逊自家用的OpenJDK发行版,免费,还带LTS。据说针对云环境做了一些性能优化和修复。AWS重度用户,用它可能会有奇效。类似的还有阿里的Dragonwell,微软的OpenJDK Build,都是一个路数。

几个专业选手:Azul Zulu, BellSoft Liberica

Java发行版选择_zulu jdk_OpenJDK与OracleJDK区别

这两位也是圈内有名的OpenJDK发行版。Azul的JVM在低延迟、大内存场景下口碑很好;BellSoft的Liberica则在嵌入式设备上支持得不错。它们都有免费版和需要付费支持的商业版。

黑科技:GraalVM

最后说个异类。GraalVM不单单是个JDK,它是个高性能的多语言虚拟机。它最牛的地方在于能把Java代码直接编译成一个本地可执行文件,压根儿不需要JVM就能跑。

因此Java应用启动能快得像C++,内存占用能小得像Go。这在微服务、Serverless这种恨不得一秒钟启动的场景里,简直是降维打击。当然,它也有一些兼容性限制,玩起来门槛稍高,适合爱折腾的先锋玩家。

总结表格

一张图看懂,不废话:

发行版

维护方

许可模式

主要特点

推荐场景

OpenJDK

Oracle & 社区

GPLv2 with CPE

Java的官方参考实现,所有发行版的基础

任何场景的基础

Oracle JDK

Oracle

Oracle No-Fee (开发/测试免费) / BCL (商业收费)

官方直接支持,性能稳定

需要Oracle商业支持且预算充足的企业

Temurin

Eclipse Adoptium (IBM, Red Hat等支持)

GPLv2 with CPE

社区驱动,严格TCK测试,高质量,完全免费

绝大多数开发者和企业的首选

Corretto

Amazon

GPLv2 with CPE

亚马逊内部使用,针对云优化,LTS支持,免费

AWS云用户,云原生应用

GraalVM

Oracle Labs

GPLv2 with CPE (社区版) / 商业版

AOT编译成Native Image,高性能,多语言支持

微服务、Serverless、CLI工具,追求极致性能的场景

说了半天,到底该怎么选?

那咱们到底该怎么选?其实思路很简单。

OpenJDK是兼容性最好,社区最大的JDK,完全免费,没有任何厂商绑定的风险。现在所有主流框架和工具都围着它转,跟着大部队走,准没错。

选择很简单,但手动部署Java是真的痛苦

好了,决定用 OpenJDK 了。然后呢?然后就是痛苦的开始,手动部署Java环境。

先去官网扒拉半天,在无数个版本号、操作系统、CPU架构(x86, ARM64)的组合里,找到需要的压缩包。下载下来,解压到一个犄角旮旯。

最要命的是配置Java环境变量。打开.zshrc或.bash_profile,小心翼翼地加上JAVA_HOME和PATH,多一个空格,少一个冒号,都可能让你一下午白干。这绝对是Java环境部署出错的重灾区。

这还不是最惨的。最惨的是,当你手头有三个项目,一个要用Java 8,一个要用Java 17,最新的那个要用Java 25……

恭喜你,你已成功解锁Java多版本管理的噩梦难度。每次切换项目都得去改环境变量,改完还得source一下,终端开多了自己都忘了现在是哪个版本,简直是精神污染。

有没有更省事儿的办法?还真有

那就用懒人神器ServBay。

它是个专门给开发者用的本地集成环境工具。别以为它只能管Python、Go、PHP、Node.js,它管起Java来,那才叫一个贴心。

首先,安装Java,变成了一键点击。

ServBay直接把主流的OpenJDK LTS版本(8, 11, 17, 21等)都给你内置好了。你只需要在它的面板上,想装哪个就点哪个,完全不用自己去找、去下载、去解压。

Java发行版选择_zulu jdk_OpenJDK与OracleJDK区别

其次,多版本切换,再也不是噩梦。

Java多版本不再是噩梦,因为ServBay算是把这事儿给搞定了。你可以同时装好几个版本的Java,它们互不影响。想切换全局默认版本?在面板上点一下,或者在终端里敲一行命令,搞定。再也不用跟.zshrc斗智斗勇了。

最后,环境干净,管理方便。

ServBay给所有服务都搞了个独立的沙箱环境,不会把你的系统搞得乱七八糟。所有服务的启动、停止,都在一个地方统一管理,清清爽爽。

结论

说到底,工具就是为了让我们爽的。我们是程序员,应该把时间花在更有创造力的事情上,而不是跟环境配置死磕。

如果你也受够了这些折腾,真心建议试试ServBay。它可能不仅能让代码写得更快,还能让写代码前的准备工作,变得无比舒心。

#java##java知识##ServBay#

这款打字机太性感,去年看一眼,惦记到今天

我司刘学文编辑的私人抽屉是个神秘的地方,外人若不小心翻到,一定会以为他是某电竞战队的大神。总价超过 3000 元的几个机械键盘,均价不低于 300 元的一大串电竞级鼠标,几块航空级铝合金鼠标垫,还有一张 F1 款电竞沙发……

然而他并不玩游戏,他说——

这些都是生产力工具,投资生产力工具,再多都不为过。

所以我要给他安利这个 Freewrite打字机,在广告法涵义不同的异国,它自称为“第一台智能打字机”。它于 2015 年初在 Kickstarter 上首秀,今天开始公开发售。

inkever_复古打字机_Freewrite智能打字机

买这个东西真的只需要一个理由,酷。

酷是因为复古,

复古是因为,

红白黑的单调与造型的方正,

恰恰碰撞出,

实用主义的大巧若拙。

配置如下:

看完上面的配置表就知道,这货长得很复古,功能却足以胜任日常写作。喜欢本地储存的踏实?Freewrite 内置储存够你写一辈子。喜欢网络同步的便捷?连上 WiFi,Dropbox、Evernote、Google Drive 随手可用,iCloud 很快也将加入支持列表(这不是我吹,连线说的)。

正因为功能够用,它的笨拙外形才格外性感。我知道,拿着这么性感的工具很难压抑灵感的尿崩,放心,只需在左上角的红点轻轻一按,这个小家伙就启动了。跟它比起来,任何号称光速唤醒的机器都是耍流氓!

它可能让你的工作事半功倍,也可能让你的工作事倍功半,得看你的工作类型。这块屏幕上不支持网页浏览,当然,用过 Kindle 的你恐怕也不会想用它来上网。因此,需要边上网查资料边写作的场景不适合,比如说爱范儿的文章;不那么依赖网络的写作场景非常适合,比如说学文擅长的限制级小说。

你若是热衷于虚构文学的热血青年,它,就是你最好的逼格证(含金量高达 99%)。

如果你拥有一台 Freewrite,不带去星巴克炫一炫实在浪费。论便携性,Freewrite 比不上 Macbook。4 磅的重量比 Macbook Pro 15 寸也轻不了太多,跟 Air 更没法比。不过,得益于 E-ink 的低功耗,4 周续航又让所有的笔电汗颜。

作为一个职业键人,Freewrite 这个 X 装的,我打一千分!

外汇期货合约的特点_e操盘

(一)它的交易的对象是外汇期货合同,而现货交易的标的是实际货物

期货合同是期货交易所为期货交易印制的标准化的合同,它对有关商品的种类、数量、交货期和交货地点都做了统一规定,只有合约的价格留待买卖双方商定。人们进行期货交易,不是为了在到期日转移有关商品的所有权,而是为了进行保值或投机。绝大多数期货交易都是在到期日之前,以对冲方式了结。对冲,又称平仓,指以方向相向的第二次期货交易结束自己对第一次期货交易承担的义务。例如在买进两张期货合同后,在到期日之前卖出两张期货合同,便可结束交易者对期货合同承担的义务。

(二)它只能在期货交易所内进行,而现货交易可以在任何地点进行

期货交易所是人们从事期货交易的场所,它是一个非赢利性机构,依靠会员缴纳的会费和契约交易费弥补支出。其主要工作是制订有关期货交易的规则和交易程序,监督会员行为。期货交易在固定场所集中进行,可以增加信息的透明度和提高市场的竞争性。

(三)实行保证金制度

外汇期货交易每笔买卖成交时,买卖双方均需按照期货交易所的有关规定向经纪人缴纳一定的保证金,以确保买卖双方履行义务。一般经纪人收到客户缴存的保证金后,要依照规定的比例将客户的部分保证金转存于清算所,同时向客户收取关于交易手续费,以作为保证的代价。期货交易的保证金除了防止交易各方违约的作用外,还是清算所结算制度的基础。保证金可分为初始保证金和维持保证金。初始保证金是客户在每一笔交易开始时缴纳的保证金,交易货币不同保证金不同。应缴保证金的数量由清算所与交易所共同决定,根据期货价格的最大波动情况进行调整,通常每笔契约为900~2800美元。保证金额度根据每天收盘时头寸数量计算,会员上缴保证金若不足额度,应于第二天补足。有些交易所对当月交割的期货契约征收较多的保证金。交易所有权增加或减少初始保证金数量,也有权对个别清算会员收取较多或较少的保证金。在美国,保证金可以部分以联邦库券等充当,而在LIFFE,保证金必须以现金形式存入清算所账户。清算会员之间每天都结清赢利与损失。