isAssignableFrom()是基于 Class 对象的继承关系判断,调用者为父类,参数为自身或子类;返回 true 表示参数类是调用者的子类或实现了其接口。instanceof 则针对对象实例进行判断,左侧为实例,右侧为其自身或父类/接口类型,返回 true 表示实例是该类型或其子类的对象。二者使用场景不同:isAssignableFrom 常用于运行时反射检查类层次,instanceof 用于普通代码中的类型安全判断。示例代码演示了两者在类、子类和接口之间的判断结果差异。

Spring AOP 通过动态代理实现横向切面功能。若目标对象实现接口,Spring 使用 JDK Proxy 创建代理;若未实现接口,则采用 CGLIB 生成目标类的子类作为代理。代理对象虽非真实实例,却具备与原实现相同的行为,从而在不修改源码的前提下实现方法拦截和增强。

本文介绍了JVM中RTTI与反射的概念及其区别。RTTI(运行时类型识别)通过获取Class对象引用,在运行时识别已知类的类型信息,其编译时类名必须已知。而反射则用于处理编译时完全未知的对象,在运行时动态加载并检查.class文件,从而创建对象或调用方法。两者的核心区别在于:RTTI在编译时即可检查.class文件,而反射则在运行时才打开并检查.class文件。

getField只能获取public字段,包括继承自父类的成员;getDeclaredField可以获取本类的全部字段(包括private),但不包括继承的字段,访问private字段需先调用setAccessible(true)。文章通过Person类演示了两者的使用:用getDeclaredField修改private的age,用getField修改public的money,分别得到预期结果。最后列出反射的优点(运行时动态获取类、提高灵活性、可配合动态编译实现强大功能)和缺点(性能开销大、安全性低、破坏封装)。

本文介绍了JVM垃圾收集算法、收集器及其底层三色标记机制。文章首先分析了分代收集理论,对比了复制、标记-清除及标记-整理三种算法。随后详细阐述了Serial、Parallel Scavenge、ParNew及CMS等收集器的特点,重点分析了CMS以最短停顿时间为目标的并发收集过程及其优缺点,并提供了电商系统的JVM参数优化实践。最后,通过三色标记算法解释了并发标记中的“浮动垃圾”与“漏标”问题,并介绍了利用写屏障实现增量更新和SATB的解决方案。