介绍

Oracle JDK 下载:https://www.oracle.com/cn/java/technologies/downloads

OpenJDK 21 下载:https://jdk.java.net/21/

Java 21作为继JDK17之后的LTS版本,

JEP 内容 分类
JEP 444 虚拟线程 核心 Java 库
JEP 431 有序集合 核心 Java 库
JEP 442 外部函数和内存 API (第三次预览) 核心 Java 库
JEP 446 作用域值 (预览) 核心 Java 库
JEP 448 Vector API (第六次孵化) 核心 Java 库
JEP 453 结构化并发 (预览) 核心 Java 库
JEP 440 Record 模式 Java 语言规范
JEP 441 switch 模式匹配 Java 语言规范
JEP 430 字符串模板 (预览) Java 语言规范
JEP 443 未命名模式的变量 (预览) Java 语言规范
JEP 445 未命名类和 main 方法 (预览) Java 语言规范
JEP 439 分代 ZGC HotSpot
JEP 449 弃用 Windows 32 位 x86 端口 HotSpot
JEP 451 准备禁止动态加载代理 HotSpot
JEP 452 密钥封装机制 API 安全库
阅读全文 »

squareTest是一款非常优秀的java单元测试生成插件,众所周知,idea的插件基本都是用java写的,那么对于java程序员来说就可以非常容易对其进行逆向研究,通过修改反编译后的字节码来达成间接修改源码的目的,例如跳过激活步骤…(当然有能力还是尽量支持正版)

squaretest官方购买地址

本文研究使用版本是最新的 squareTest 1.8.7

阅读全文 »

2023年3月21日发布甲骨文发布了Java 编程语言和虚拟机的20版本,最终的特性集中包含了 7 个 JEP:

Java 20 的特性节奏类似于 JDK 19 的 7 个新特性和 JDK 18 的 9 个新特性。但是,与 JDK 18 之前的几个版本相比,特性要更少一些,比如,JDK 17 中有 14 项特性,JDK16 中有 17 项特性,JDK 15 中有 14 项特性,JDK 14 中有 16 项特性。

这个版本的 JEP 为AmberLoomPanama项目的新一轮预览和孵化持续贡献了特性。值得注意的是,JDK 20 中没有代表Valhalla项目的 JEP。

阅读全文 »

ChatGPT 是 OpenAI 公司的一款人工智能聊天机器人,自从 ChatGPT 面市以来,深受大家的喜欢,热度是有增无减,但是国内用户无法目前还无法使用。首先注册比较麻烦,需要国外的手机号,其次,注册账号之后,登录也会有其它各种问题,这里简单记录下注册之后正确的登录操作。

**OpenAI’s services are not available in your country. (error=unsupported_country) **

openai 的服务在您所在的国家/地区不可用。

使用vpn的话又会报其它错误,比如:

Access denied

其实只要按照步骤,使用VPN登录之后,再关掉,刷新页面即可正常使用

阅读全文 »

Java19新特性介绍简单使用

Java19于 2022年9 月 20 日正式发布以供生产使用,非长期支持版本。不过,JDK 19 中有一些比较重要的新特性值得关注。

其中 外部函数API、虚拟线程和结构化并发这 3个感觉属于比较重要的新特性,接下来对这3个特性进行简单的介绍并简单的上手代码体验

阅读全文 »

问题及原因分析

发现线上异常报错,定位日志提示 主键插入冲突,以往并未发现出现过类似问题,查询日志是从 2022-12-16 后pod扩容后有偶发性产生。猜测原因为雪花算法生成的 ID 有重复,项目中雪花算法使用的是mybatis-plus中提供的工具类com.baomidou.mybatisplus.core.toolkit.Sequence生成,怀疑dataCenterId 和workerId有重复

阅读全文 »

git也用了挺久,今天才碰到这个大坑,关于文件夹名称大小写的问题,顺手记录下解决过程。

问题现象:

今天更新代码之后,发现出现了一部分未未提交代码,并且包路径错误。不管是还原操作,还是手动修改后都不能提交。排查了半天,发现git仓库里边有两个一样的文件加,唯一的区别是一个字母大小写不一样。一个是Abc,另外一个abc。原来是有同学代码包命名写成了大写,发现有问题之后重构成小写,但是提交到git之后,Abc保留了下来,也就是说git仓库同时存在Abc和abc两个文件夹。我这边更新代码之后下载到了Abc的,导致本地代码报错。

阅读全文 »

问题现象

系统A依赖下游的一个dubbo服务B,偶发调用超时(这里说明一下,服务日常平均RT在20ms以内,但是会有偶发超时时间超过1000ms以上,这里超时是因为下游设置熔断超时时间为100ms)。经过公司内部监控工具初步排查,在服务B侧观察到服务比较稳定,95line也稳定在30ms左右,99line也只有70ms左右。但是在服务A端,也就是调用方的的监控上,看调用链上会有远高于接口正常耗时的裸耗时。

阅读全文 »

业务背景

随着交易量的持续上升,各系统服务面临的压力也越来越大。作为交易链路的重要环节,履约中台提供了运费计算、履约方式寻仓等一系列重要功能,业务对系统吞吐量的要求也越来越高。而特别是履约寻仓可以看作一个流量入口型接口,核心逻辑会依赖履约、商家、商品、设置、库存等多个业务,对外向交易提供功能接口,对内调度各个下游服务获取数据进行聚合,可以算是比较典型的I/O密集型(I/O Bound)特点。在商家逐步全量迁移到新系统之后,交易量日益增长的情况下,使用同步逐个查询各个下游服务的方式已经没办法满足交需求,因此开始考虑将同步加载改为并行加载的可行性。

并行方式

并行从下游获取数据,从IO模型上来讲分为同步模型异步模型

同步模型

从各个服务获取数据最常见的是同步调用,如下图所示:

在同步调用的场景下,接口耗时长、性能差,接口响应时长T > T1+T2+T3+……+Tn,这时为了缩短接口的响应时间,一般会使用线程池多线程并行获取数据,但是也存在一定问题,会导致资源利用率比较低:

  • CPU资源大量浪费在阻塞等待上,导致CPU资源利用率低。在Java 8之前,一般会通过回调的方式来减少阻塞,但是大量使用回调,又引发臭名昭著的回调地狱问题,导致代码可读性和可维护性大大降低。
  • 为了增加并发度,会引入更多额外的线程池,随着CPU调度线程数的增加,会导致更严重的资源争用,宝贵的CPU资源被损耗在上下文切换上,而且线程本身也会占用系统资源,且不能无限增加。

同步模型下,会导致硬件资源无法充分利用,系统吞吐量容易达到瓶颈。

NIO异步模型

我们主要通过以下两种方式来减少线程池的调度开销和阻塞时间:

  • 通过RPC NIO异步调用的方式可以降低线程数,从而降低调度(上下文切换)开销,如Dubbo的异步调用可以参考《dubbo调用端异步》一文。
  • 通过引入CompletableFuture(下文简称CF)对业务流程进行编排,降低依赖之间的阻塞。本文主要讲述CompletableFuture的使用和原理。

为什么会选择CompletableFuture?

目前业界广泛流行的解决方案,主要包括Future、CompletableFuture注2、RxJava、Reactor。它们的特性对比如下:

Future CompletableFuture RxJava Reactor
Composable(可组合) ✔️ ✔️ ✔️
Asynchronous(异步) ✔️ ✔️ ✔️ ✔️
Operator fusion(操作融合) ✔️ ✔️
Lazy(延迟执行) ✔️ ✔️
Backpressure(回压) ✔️ ✔️
  • 可组合:可以将多个依赖操作通过不同的方式进行编排,例如CompletableFuture提供thenCompose、thenCombine等各种then开头的方法,这些方法就是对“可组合”特性的支持。
  • 操作融合:将数据流中使用的多个操作符以某种方式结合起来,进而降低开销(时间、内存)。
  • 延迟执行:操作不会立即执行,当收到明确指示时操作才会触发。例如Reactor只有当有订阅者订阅时,才会触发操作。
  • 回压:某些异步阶段的处理速度跟不上,直接失败会导致大量数据的丢失,对业务来说是不能接受的,这时需要反馈上游生产者降低调用量。

RxJava与Reactor显然更加强大,它们提供了更多的函数调用方式,支持更多特性,但同时也带来了更大的学习成本。而我们本次整合最需要的特性就是“异步”、“可组合”,综合考虑后,我们选择了学习成本相对较低的CompletableFuture。

阅读全文 »

目前工作中用的版本还是JAVA8,现在JAVA版本发布太快,目前已经有11和17两个LTS版本。从JDK1.8开始,Oracle的JDK 付费政策 就一直被人诟病,但是从17开始,Oracle宣布推出JDK免费服务。并且Spring 已经宣布计划在22年4季度发布的Spring Framework 6 和Spring Boot 3要求的最低版本就是17,所以是时候可以开始尝试一下新版本了。

PS:先更新一下,22年9月发布的JDK19中,终于推出了重磅新特性:虚拟线程。虽然19还不是LTS版本,并且虚拟线程也还处于预览阶段,但是还是非常期待在下个正式版本中能够见到。先简单补一下19的新特性吧,详细体验找时间在补上…….()

阅读全文 »
0%