JDK

浏览该分类下的所有文章

从96%到70%

本文记录了把四个独立的 Spring Boot 项目(chat、puke、zepp、blog)合并为一个 Maven 多模块工程,只启动一个 total‑app.jar 的实践。原先每个项目占用一个 JVM,导致服务器内存接近 96%;通过在根 pom 统一依赖、在 launcher 中用 SpringApplicationBuilder 依次启动四个 ApplicationContext,并将配置分别放在 chat.yml、puke.yml、zepp.yml、blog.yml 中,消除了 JVM 底座的重复开销,内存降至约 70%。文章重点阐述了类路径冲突、资源目录重名、自动配置串扰和日志全局化等踩坑及对应的统一依赖、资源隔离、spring.autoconfigure.exclude 等解决方案。部署时仅需一次打包并用单条 java 命令启动,端口和 Nginx 配置保持不变,运维更简洁。该方案适合资源受限、访问量不高且对隔离要求不强的场景,虽牺牲了故障隔离,但能显著降低内存压力,为小型服务器提供务实的优化路径。

Java 21 新功能介绍(LTS)

Java 21(2023 9月发布)是继 17 后的下一个 LTS,正式推出 15 项 JEP。核心亮点包括:虚拟线程(JEP 444)实现数百万轻量线程、资源占用极低,配合结构化并发(JEP 453)提供任务范围管理与异常传播;序列集合(JEP 431)扩展 List、Map 的顺序操作;记录模式与增强的模式匹配(JEP 440)提升解构与 switch 表达力;外部函数与内存 API(JEP 442)取代 JNI,实现安全高效的本地调用;还有字符串模板(预览)、分代 ZGC、后量子密钥封装等特性。文中指出了已弃用的 Windows 32‑bit、Applet、Security Manager 等,并给出兼容性检查、虚拟线程与 ZGC 调优建议。通过高并发 Web 服务和 ETL 场景示例,展示新并发模型的实际价值,并展望虚拟线程、模式匹配和 Project Loom 将继续驱动 Java 生态演进。开发团队应尽早评估迁移,以享受长期支持和性能提升。

CentOS 7 安装 JDK 8、MySQL 8、Redis 6、Nginx保姆级教程

本文提供在 CentOS 7 上一步步安装 JDK 8、MySQL 8、Redis 6 与 Nginx 的完整指南。包括卸载旧 Java、使用 yum 安装 OpenJDK 并配置环境变量;添加阿里云和 MySQL 官方仓库、安装并启动 MySQL、开放 3306 端口;安装编译依赖后源码编译 Redis、编辑配置、创建 systemd 服务实现开机自启;通过 epel 安装 Nginx、设置开机启动、检查状态并放通 HTTP/HTTPS 防火墙端口。

如何让 a == 1 && a == 2 && a == 3同时成立?

文章介绍利用 Java 的 `IntegerCache` 缓存特性,使表达式 `a == 1 && a == 2 && a == 3` 成立。通过反射获取 `Integer` 的内部类 `IntegerCache`,把缓存中下标对应的对象(原本分别是 1、2、3)改为同一个实例(1),随后 `Integer.valueOf` 或强制装箱得到的对象均指向同一内存地址,比较结果为 `true`;而使用 `new Integer` 会创建全新对象,地址不同,比较为 `false`。文中给出完整代码、运行结果,并解释 `valueOf` 与 `new` 的实现差异,强调此技巧体现了对 JDK 源码和缓存机制的深入了解,可用于性能预热等实际场景。

Java8新特性之Stream流

Stream 是 Java 8 处理集合的核心抽象,提供惰性求值、不可变数据源、可并行执行等特性。文章先介绍了 Stream 的分类(无状态/有状态、短路/非短路),随后列举了五种常用创建方式:Collection 的 stream()/parallelStream()、Arrays.stream、Stream.of/iterate/generate 以及 BufferedReader.lines、Pattern.splitAsStream。接着详细说明了中间操作——filter、limit、skip、distinct、map、flatMap、sorted、peek 等的使用场景和示例。随后阐述了终止操作,包括匹配/查找(allMatch、anyMatch、findFirst 等)、规约(reduce)以及收集(collect),并通过 Collectors 提供的 toList、toSet、toMap、joining、counting、summing、averaging、summarizing 等方法展示了如何将流结果转化为常用容器或统计信息。全文以代码示例为主,帮助读者快速掌握 Stream 的创建、转换、过滤、排序、终止及收集全过程。

全面拥抱Java17!

Java 17作为自Java 11后的第二个 LTS 版本,带来了多项语法升级。文章围绕九个核心特性展开:文本块简化多行字符串;switch 表达式支持返回值、箭头语法和 yield;record 让不可变数据类一行声明;sealed class 通过 permits 限定子类继承范围;instanceof 模式匹配在判断时直接完成类型转换并绑定变量;Helpful NullPointerExceptions 在 NPE 报错中指明空值来源;以及日期周期、紧凑数字格式化的改进和 Stream.toList() 的便捷集合创建。通过示例代码,作者展示了这些新特性提升可读性、简化代码与调试效率,鼓励 Java 开发者全面迁移至 Java 17。