53 归档分页
370 留言互动
4 核心专题

最近更新

Java 2021-10-29

常用设计模式

文章介绍了几种常用设计模式及其在业务代码中的实践。首先通过文件解析的例子说明 if…else 分支违背开闭原则和单一职责,提出策略模式的定义、接口抽象和基于 Spring 自动装配的实现方式。随后以订单校验为场景,指出使用异常做流程控制的问题,阐释责任链模式的概念、抽象处理器结构以及在 Spring 中通过注解和链式初始化完成各校验节点的组织。最后简要提出模板方法模式在统一请求流程(如商户信息查询、报文加签、HTTP 调用)中的作用。整体强调通过这些模式提升代码可维护性、可扩展性和职责分离。

设计模式 阅读全文
Java 2021-10-17

JVM垃圾收集器ParNew&CMS与底层三色标记算法

文章介绍了JVM分代回收的基本原理,阐述了新生代采用复制算法、老年代使用标记‑清除或标记‑整理的原因,并详细比较了Serial、Parallel、ParNew、CMS等收集器的实现与适用场景。重点解析了CMS的四阶段并发标记、三色标记、写屏障及其产生的浮动垃圾、漏标问题,提供了ParNew+CMS在大流量电商系统中的参数调优方案,强调通过合理设置堆、Survivor、晋升阈值等可降低Full GC频率,提高响应时延。

Java 2021-10-28

Class对象的创建方式

本文演示了在 Java 中获取 Class 对象的五种常用方式:①通过实例调用 getClass();②使用 Class.forName(全限定名);③直接使用类字面量 .class;④通过基本类型包装类的 TYPE 字段获取原始类型 Class;⑤利用已有 Class 对象的 getSuperclass() 获取父类的 Class。代码示例分别展示了每种方法的使用及输出结果,帮助读者理解反射机制中 Class 对象的获取途径。

反射 阅读全文
Java 2021-10-27

JVM垃圾收集器汇总

Serial 是单线程复制收集器,适用于 Client 模式小堆,停顿可接受;ParNew 为其多线程版,可配合 CMS 使用,在 Server 环境多 CPU 时提升并行度。Parallel Scavenge 同样是多线程复制收集器,侧重吞吐量,通过‑XX:GCTimeRatio、‑XX:MaxGCPauseMillis 调节;对应的老年代有 Serial Old(单线程标记‑整理)和 Parallel Old(多线程标记‑整理),后者与 Parallel Scavenge 组合实现高吞吐。CMS 采用并发标记‑清除,目标最短停顿,但对 CPU 敏感、产生碎片且无法处理浮动垃圾。G1 采用分区‑并行‑增量回收,提供可预测的停顿时间,调参主要是‑XX:MaxGCPauseMillis 等。整体上,JVM 提供了从单线程到并行、从低停顿到高吞吐的多种收集器,以满足不同应用场景的性能需求。

Java 2021-10-27

什么是桥接方法?

桥接方法是 JDK 1.5 为兼容泛型擦除后产生的编译器合成方法,字节码中标记为 ACC_BRIDGE 与 ACC_SYNTHETIC,可通过 Method.isBridge() 判断。它在以下情况下生成:①实现带泛型参数的接口,编译器为子类补充一个返回 Object、参数为 Object 的方法;②子类覆盖父类方法并使用协变返回类型(返回子类更具体的类型),编译器生成与父类签名相同的桥接方法。参数类型、数量、修饰符提升或 static 方法的覆盖都不会产生桥接方法。生成桥接方法的目的在于保持泛型代码在擦除后的二进制兼容性,使得在运行时通过父类或接口引用调用时仍能正确分派到子类实现,同时避免因类型不匹配而产生的运行时错误。

泛型 阅读全文
Java 2021-10-18

什么是类型擦除?

Java 泛型在编译后会被擦除,进入 JVM 时只剩原始类型。未限定的类型参数被替换为 Object,限定上限的则替换为上限类型,因而不同类型参数的实例在运行时属于同一类。通过反射可以绕过编译期的类型检查,在已擦除的集合中加入不匹配的元素,体现了 Java 泛型的“伪泛型”本质。

泛型 阅读全文