Java

浏览该分类下的所有文章

JVM垃圾收集器G1&ZGC

G1(-XX:+UseG1GC)将堆划分为约2048个等大小Region,保留但不强制分代,采用复制算法在STW阶段按“回收价值‑成本”优先选择Region,实现可预测的停顿(‑XX:MaxGCPauseMillis),并通过Humongous区专门处理大对象。G1的主要GC类型为Young、Mixed和Full,提供丰富的调优参数以平衡吞吐量和延迟,适合8 GB 以上、停顿要求在 0.5 s 以内的大内存服务器。 ZGC(-XX:+UseZGC)是 JDK 11 引入的低延迟收集器,目标是堆大小任意(TB 级)时仍保持 ≤10 ms 停顿,采用单代、Region(小‑2 MB、 中‑32 MB、 大‑≥4 MB)布局,利用读屏障、颜色指针和自愈转发表实现全并发标记‑整理,并自动感知 NUMA。ZGC 牺牲约 15% 吞吐以换取极短、可预测的停顿,适用于对延迟极为敏感的超大堆应用。

Nacos 注册中心的心跳机制

微服务启动后,内置的 Nacos 客户端每 5 秒向 Nacos 服务器的 /nacos/v1/ns/instance/beat 接口发送一次心跳,携带实例名称、IP、端口、集群、权重等信息。服务器的 naming 模块收到心跳后,先依据 IP+端口判断实例是否已存在;不存在则在实例 Map 中注册;已存在则记录本次心跳时间、标记为健康并推送状态变更消息,随后返回新的心跳间隔。为防止无效实例长期占用,Nacos 每 20 秒扫描实例 Map,将“非健康”实例剔除。这样实现了服务实例的实时注册、健康监测与自动清理。

JVM内存模型深度剖析与优化

本文系统阐述了JVM的整体结构与内存模型,重点解释了Minor GC中对象复制后引用的更新机制——在根扫描阶段记录引用并在对象搬迁后统一指向新地址。随后列举了常用的JVM启动参数(‑Xms、‑Xmx、‑Xmn、‑Xss、‑XX:MetaspaceSize/MaxMetaspaceSize 等)及其含义与调优原则,指出元空间大小调整会触发代价高昂的Full GC,建议将两者设为相同且足够大。通过StackOverflowError 示例说明‑Xss 对线程栈容量和并发线程数的影响。最后给出面向日均百万级订单系统的调优建议:尽量让对象在新生代分配回收,避免频繁晋升至老年代,并为系统预留充足内存,降低GC次数。

List去除重复数据的五种方式

本文介绍了在Java中对ArrayList去重的五种实现方式:①利用LinkedHashSet既去重又保序;②Java 8 Stream的distinct()配合collect;③通过HashSet判断并手动保持顺序;④遍历列表并用contains检测防止重复;⑤使用双层for循环逐一比较并删除。每种方法均附有代码示例并说明其特点。