EXPLORE · 循迹而来

Java

FOLLOW YOUR CURIOSITY

把同一个话题,读得更深。

这个话题下有 88 篇手记。

Java 泛型的类型通配符

1187 阅读

类型通配符用于在泛型中表示未知或受限的元素类型。 - `<?>` 表示元素类型未知的 List,是所有具体泛型 List 的父类,但不能向其中写入元素。 - `<? extends T>` 表示元素类型为 T 或其子类的 List,只能读取元素,写入受限。 - `<? super T>` 表示元素类型为 T 或其父类的 List,可安全写入 T 类型元素,读取时只能得到 Object。 文章通过 `GenericDemo` 示例演示了三种通配符的声明方式及合法/非法的赋值情况,帮助理解它们在类型安全和灵活性上的作用。

JVM垃圾收集器G1&ZGC

1649 阅读

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% 吞吐以换取极短、可预测的停顿,适用于对延迟极为敏感的超大堆应用。

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

1288 阅读

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

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

1319 阅读

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