
源码学习
文章平均质量分 91
csdn_tom_168
富贵如可求,虽执鞭之士,吾亦为之。如不可求,从吾所好。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Spring Assert 详解及详细源码展示
Spring的Assert工具类位于org.springframework.util包,提供静态方法用于验证程序状态、参数合法性和业务逻辑条件。其核心功能包括对象/集合非空检查、字符串校验、数值范围验证、布尔条件判断以及异常断言。源码分析显示其方法简洁高效,如assertNotNull()直接检查null值,assertNotEmpty()验证集合内容,assertNotBlank()处理空白字符串。典型应用场景包含服务层参数校验(如验证非空用户对象)、DAO层数据完整性检查(如确保查询结果存在)及单元测试原创 2025-07-04 00:13:27 · 1010 阅读 · 0 评论 -
Spring ReflectionUtils 详解及详细源码展示
Spring 的 ReflectionUtils 是封装 Java 反射 API 的工具类,位于 org.springframework.util 包中。它简化了反射操作,提供方法/字段的获取与调用、构造方法访问等功能,并处理访问权限和异常转换。核心方法包括:递归查找父类方法的 getMethod()、支持私有方法调用的 invokeMethod()、以及处理字段操作的 getField() 和 setField()。该工具类通过 makeAccessible() 方法绕过访问限制,简化反射使用,同时将检查原创 2025-07-04 00:13:15 · 938 阅读 · 0 评论 -
Spring BeanUtils 详解及详细源码展示
Spring BeanUtils 是一个专注于对象属性复制的工具类,主要通过反射和类型转换技术简化 JavaBean 之间的属性复制。其核心功能包括基础属性复制、忽略指定属性、自定义类型转换和高级属性映射。源码分析表明,它通过 BeanWrapper 动态访问属性,支持类型兼容检查和使用 ConversionService 进行类型转换,同时提供了忽略特定属性的机制。典型应用场景包括 DTO 转换和对象克隆,使用时需注意性能、深拷贝、类型兼容性和空值处理等问题。原创 2025-07-02 15:37:48 · 585 阅读 · 0 评论 -
Spring @Lazy 详解及详细源码展示
@Lazy 是 Spring 框架用于延迟初始化 Bean 的注解,将 Bean 实例化推迟到首次使用时,减少启动时间和内存占用。适用于高初始化成本或非立即使用的 Bean。 核心机制: 通过动态代理实现延迟加载,首次调用时触发实例化 条件化延迟可通过 SpEL 表达式控制 不同作用域表现不同(单例延迟一次,原型不受影响) 使用场景: 数据库连接池等资源密集型 Bean 条件化初始化(如根据配置开关) 解决构造器循环依赖 注意事项: 首次调用会有初始化性能开销 需注意与 @PostConstruct 的执行原创 2025-07-02 15:37:30 · 719 阅读 · 0 评论 -
Spring IOUtils 详解及详细源码展示
Apache Commons IO 的IOUtils是 Java IO 操作的事实标准工具类,提供了丰富的静态方法简化流操作、文件处理和资源管理。Spring 框架虽未直接提供IOUtils,但通过Resource接口、等工具与 Java IO 能力深度集成,同时广泛使用IOUtils处理内部 IO 场景(如文件上传、配置读取)。掌握IOUtils的核心方法(如copytoString)和 Spring 中的 IO 工具(如Resource),可以显著提升 IO 操作的效率和代码的健壮性。原创 2025-07-02 15:36:54 · 975 阅读 · 0 评论 -
深度解析 Spring 事件监听机制
Spring的事件监听机制基于观察者模式,实现了组件间的松耦合通信。核心包括事件(ApplicationEvent)、监听器(ApplicationListener)和发布器(ApplicationEventPublisher)。事件发布流程分为包装事件、获取监听器和广播事件三步。监听器可通过传统接口实现或@EventListener注解方式注册。高级特性支持异步处理(@Async)、事务同步事件等。源码分析表明,事件多播器(ApplicationEventMulticaster)是广播核心,默认实现Sim原创 2025-07-02 15:35:48 · 936 阅读 · 0 评论 -
AutoConfigurationImportSelector 详解及详细源码展示
AutoConfigurationImportSelector是Spring Boot自动配置的核心组件,通过@EnableAutoConfiguration触发。它从META-INF/spring.factories加载候选配置类,并结合@Conditional条件和排除规则进行筛选,最终将符合条件的类导入Spring容器。其工作流程包括:初始化时注入环境变量和类加载器;读取并过滤配置类;将筛选结果注册为BeanDefinition。该机制实现了Spring Boot"约定优于配置"的原创 2025-07-02 15:33:52 · 672 阅读 · 0 评论 -
@Value 详解及详细源码展示
Value位于/*** SpEL 表达式(用于从配置文件、环境变量等获取值)*//*** 是否必需(默认 true,属性不存在时抛出异常)*/关键属性说明value:必填属性,指定 SpEL 表达式(通常以${}包裹配置文件中的属性名)。required:可选属性(默认true),若为false,当配置属性不存在时注入null(不会抛异常)。@Value是 Spring 中从配置文件注入属性值的核心注解,支持基础类型、SpEL 表达式、可选属性等多种场景。通过结合。原创 2025-07-02 12:22:35 · 740 阅读 · 0 评论 -
@Primary 与 @Order 详解及详细源码展示
摘要: Spring框架中的@Primary和@Order注解分别用于解决Bean的优先级和执行顺序问题。@Primary标记主候选Bean,消除多实现类注入时的歧义,适用于接口多实现、@Bean方法配置等场景,可与@Qualifier配合使用。@Order通过数值控制Bean的初始化、依赖注入和事件监听顺序,数值越小优先级越高,典型应用于@PostConstruct方法、List注入排序和事件监听器顺序控制。两者协同使用可精细化管理Bean生命周期。(150字)原创 2025-07-01 12:36:19 · 724 阅读 · 0 评论 -
@Component 系列注解(@Repository @Service和@Controller 等) 详解及详细源码展示
@Component系列注解是Spring框架中用于自动扫描和管理Bean的核心机制,包括@Repository、@Service、@Controller等衍生注解。它们通过语义化方式标识不同层级组件(数据层、业务层、控制层),帮助Spring容器识别注册。这些注解本质都是@Component的别名,但提供更明确的语义。使用时需注意分层清晰,避免循环依赖,并配合@Autowired等注解完成依赖注入。最佳实践包括优先使用@Bean处理复杂初始化逻辑,保持命名语义化,以及合理运用Spring Boot的自动扫原创 2025-07-01 12:35:51 · 714 阅读 · 0 评论 -
AOP注解 @EnableAspectJAutoProxy、 @Aspect、 @Pointcut、 @Before、 @After等 详解及详细源码展示
Spring AOP通过注解驱动实现横切关注点的模块化处理,核心注解包括@EnableAspectJAutoProxy(启用代理)、@Aspect(标记切面类)、@Pointcut(定义拦截规则)以及各类通知注解(@Before/@After等)。其执行流程包含代理生成、切面扫描和逻辑编织三大部分,其中@EnableAspectJAutoProxy通过AspectJAutoProxyRegistrar注册代理逻辑,而切点表达式(execution/within/annotation等)则精确控制方法拦截范围原创 2025-07-01 12:35:09 · 763 阅读 · 0 评论 -
@ComponentScan 和 @ComponentScans 详解及详细源码展示
Spring 框架中的 @ComponentScan 和 @ComponentScans 注解用于组件扫描,将特定注解标记的类注册为 Spring Bean。@ComponentScan 定义单个扫描配置,支持路径、过滤规则等设置;@ComponentScans 是其复数形式,允许组合多个扫描配置。源码解析显示,@ComponentScan 提供包路径、过滤器和加载策略等精细控制,而 @ComponentScans 通过数组形式容纳多个扫描规则。Spring 容器启动时,会解析这些注解,创建扫描器执行任务,原创 2025-06-30 08:20:42 · 718 阅读 · 0 评论 -
@PostConstruct 与@PreDestroy 详解及详细源码展示
@PostConstruct 和 @PreDestroy 是 JSR-250 标准中用于管理 Bean 生命周期的关键注解,分别标记初始化后和销毁前的回调方法。在 Spring 中,@PostConstruct 在依赖注入完成后执行,早于其他初始化逻辑;@PreDestroy 则在 Bean 销毁前触发。它们适用于资源初始化和清理场景,如数据库连接池管理和缓存处理。使用时需注意方法签名限制(非静态、无参数),并了解其与 InitializingBean/DisposableBean 的执行顺序差异。这些注解原创 2025-06-27 00:11:44 · 989 阅读 · 0 评论 -
@Scope 与 @RefreshScope 详解及详细源码展示
摘要:@Scope和@RefreshScope是Spring中管理Bean作用域的关键注解。@Scope控制Bean生命周期(如单例、原型等),通过proxyMode解决依赖注入问题。@RefreshScope用于动态配置刷新,当配置变更时重建Bean以加载新值。前者适用于固定作用域场景,后者专为配置热更新设计,两者在微服务架构中互补使用。核心区别在于:@Scope定义基础作用域,@RefreshScope扩展了动态刷新能力。原创 2025-06-27 00:11:27 · 736 阅读 · 0 评论 -
@Inject 详解及详细源码展示
本文详细解析了JSR-330标准中的@Inject依赖注入注解。作为Jakarta EE标准注解,@Inject通过类型匹配和限定符(如@Named)实现依赖注入,支持字段、方法和构造器注入。相比Spring的@Autowired,@Inject更简洁但功能有限,需配合@Named解决多候选Bean问题。文章从定义、源码机制、使用场景和注意事项展开,对比了不同注解特性,并提供了构造器注入等最佳实践示例。@Inject适合需要跨框架兼容的场景,其实现依赖于Spring的InjectAnnotationBean原创 2025-06-27 00:10:55 · 976 阅读 · 0 评论 -
@Resource 详解及详细源码展示
@Resource 是 Java EE/Jakarta EE 标准中用于依赖注入的注解,Spring 框架也支持该注解。它通过名称匹配或类型匹配自动注入依赖的 Bean,适用于需要显式指定依赖名称或跨框架集成的场景。@Resource 优先按名称匹配,若未指定名称则按类型匹配,无匹配时抛出异常。典型使用场景包括按名称注入多同类型 Bean、解决多候选 Bean 歧义等。相比 @Autowired,@Resource 是标准注解且匹配优先级不同,但不支持可选依赖。使用时需注意名称大小写敏感、避免循环依赖等问题原创 2025-06-27 00:10:37 · 780 阅读 · 0 评论 -
@DependsOn 详解及详细源码展示
@DependsOn 是 Spring 框架中用于显式声明 Bean 依赖关系的核心注解,通过强制指定依赖 Bean 的初始化顺序,解决隐式依赖导致的初始化问题。该注解适用于构造器注入无法覆盖的场景(如方法调用间接依赖、第三方库集成等),其实现基于 DependsOnAnnotationBeanPostProcessor 调整 BeanDefinition 的初始化顺序。使用时需注意避免循环依赖,并优先考虑构造器注入等自动推导方式。合理使用 @DependsOn 能有效增强复杂依赖场景下的应用稳定性。原创 2025-06-27 00:10:11 · 854 阅读 · 0 评论 -
@PropertySource和@PropertySources 详解及详细源码展示
@PropertySource 和 @PropertySources 是 Spring 框架中用于加载外部属性文件的注解,支持从类路径或文件系统加载配置到 Environment 中,通过 @Value 或 Environment 接口访问。@PropertySource 定义单个属性源路径,而 @PropertySources 组合多个属性源;两者可配合 ignoreResourceNotFound 和 encoding 等参数灵活控制加载行为。典型使用场景包括:外部化配置(如数据库连接)、多环境隔离(按原创 2025-06-27 00:09:42 · 541 阅读 · 0 评论 -
@Import 详解及详细源码展示
@Import是Spring框架中用于模块化配置的核心注解,允许导入其他配置类或动态注册Bean定义。它支持三种导入方式:直接导入配置类、动态选择配置类(ImportSelector)和动态注册Bean(ImportBeanDefinitionRegistrar)。通过解析@Import注解,Spring的ConfigurationClassParser和ImportAnnotationBeanDefinitionRegistrar协同工作,实现配置合并与Bean动态注册。典型应用场景包括模块化配置管理和条原创 2025-06-27 00:09:23 · 989 阅读 · 0 评论 -
@Profile 详解及详细源码展示
Spring框架中的@Profile注解是实现多环境配置的核心工具,它通过标记Bean或配置类所属的环境(如dev、test、prod),实现不同环境下组件的条件化注册。该注解支持多环境标识,仅当激活的Profile匹配时才会注册对应Bean,可通过配置文件、命令行或@ActiveProfiles激活。典型应用包括环境隔离的数据库配置、测试环境禁用特定Bean等。需注意Profile命名规范、默认行为及与@Conditional注解的区别。其底层由ProfileAnnotationBeanDefinitio原创 2025-06-27 00:09:08 · 962 阅读 · 0 评论 -
@Qualifier 详解及详细源码展示
@Qualifier 是 Spring 框架用于解决依赖注入歧义的关键注解,当容器存在多个同类型 Bean 时,通过指定限定符名称(value)明确要注入的实例。其核心作用是与 @Autowired 协同,筛选出唯一匹配的候选 Bean。相比 @Primary 的默认优先级,@Qualifier 提供了更精准的控制。典型应用场景包括多接口实现的选择、自定义限定符定义等,需注意限定符名称的唯一性和与 Bean 定义的匹配性。该注解通过 QualifierAnnotationAutowireCandidateR原创 2025-06-27 00:08:48 · 1013 阅读 · 0 评论 -
@Autowired 详解及详细源码展示
@Autowired 是 Spring 框架实现依赖注入的核心注解,通过自动装配机制简化对象间依赖管理。它支持字段、构造器和方法注入,并提供可选依赖、歧义解决等灵活配置。底层通过 AutowiredAnnotationBeanPostProcessor 实现依赖查找与注入,同时利用三级缓存处理循环依赖问题。使用时需注意依赖的必要性、多候选 Bean 的歧义性以及循环引用风险。合理使用 @Autowired 能显著提升代码简洁性和可维护性。原创 2025-06-27 00:08:31 · 963 阅读 · 0 评论 -
@Bean注解 与@Component 详解及详细源码展示
摘要: @Bean 和 @Component 是 Spring 管理 Bean 的核心注解,二者定位不同。@Bean 为方法级注解,需在 @Configuration 类中显式定义,适用于第三方库集成或复杂初始化逻辑;@Component 为类级注解,通过扫描自动注册,适合标记服务层、数据层等组件。@Bean 支持灵活的生命周期控制和条件化注册,而 @Component 更侧重轻量级 POJO 的自动管理。开发者需根据场景选择:需精细控制时用 @Bean,常规组件用 @Component 及其派生注解(如原创 2025-06-27 00:08:08 · 913 阅读 · 0 评论 -
@Conditional 系列注解 详解及详细源码展示
Spring的@Conditional系列注解通过条件判断控制Bean注册和配置类生效,是Spring Boot自动配置的核心机制。常用注解如@ConditionalOnClass(检查类路径)、@ConditionalOnMissingBean(避免重复注册)、@ConditionalOnProperty(基于配置属性)等,通过matches方法评估条件,实现灵活配置。这些注解广泛用于自动配置、环境适配(如Web/非Web应用)等场景,提升代码灵活性和可维护性。原创 2025-06-27 00:07:40 · 973 阅读 · 0 评论 -
@EnableAutoConfiguration @SpringBootConfiguration @Configuration 详解及详细源码展示
Spring Boot 核心注解解析:@EnableAutoConfiguration 负责自动配置机制,通过 AutoConfigurationImportSelector 加载条件化配置;@SpringBootConfiguration 作为主配置类标识,继承 @Configuration 特性;@Configuration 定义显式配置类。三者协同工作:主类启动触发组件扫描,自动配置根据依赖加载对应 Bean,自定义配置类补充特定逻辑,共同完成应用上下文初始化。典型场景包括主类标注、自定义 Bean原创 2025-06-27 00:06:49 · 906 阅读 · 0 评论 -
@SpringBootApplication 详解及详细源码展示
@SpringBootApplication是Spring Boot的核心注解,通过组合@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan简化应用配置。它标记主配置类,触发自动配置(根据依赖自动加载组件)、组件扫描(注册当前包下所有组件)和应用上下文初始化。注解还支持排除特定自动配置类、自定义扫描路径等功能,其工作流程最终完成所有Bean的初始化,使应用进入就绪状态。原创 2025-06-27 00:06:08 · 1026 阅读 · 0 评论 -
Spring StringUtils 详解及详细源码展示
StringUtils是Spring框架中的字符串工具类,提供一系列静态方法处理字符串操作,包括空值判断、子串截取、内容替换等功能。其核心设计特点是安全性和灵活性,例如isEmpty()和isBlank()方法通过源码级校验确保健壮性,substring()自动处理越界索引避免异常,replace()支持大小写敏感的字符替换。这些方法均经过优化,如利用StringBuilder提升拼接效率,采用Unicode标准处理空白字符,并通过参数校验增强鲁棒性,适用于各种字符串处理场景。原创 2025-06-27 00:03:21 · 815 阅读 · 0 评论 -
Spring ObjectUtils 详解及详细源码展示
ObjectUtils是Spring框架中处理对象操作的核心工具类,提供判空、默认值设置、克隆、类型转换等功能。其核心方法包括: isEmpty():支持多类型空值判断(字符串、集合、数组等); getDefaultIfNull():通过泛型实现安全的空值替换; cloneIfPossible():基于反射的浅克隆,自动处理不可克隆对象; convertIfNecessary():支持复杂类型转换(集合/自动类型转换)。 设计特点包括多类型兼容、泛型支持、容错处理,是Spring内部对象管理的实用工具。原创 2025-06-26 00:06:28 · 1012 阅读 · 0 评论 -
JDK 8 `Collections` 详解:核心功能、源码解析与实战指南
JDK 8 Collections 工具类摘要 Java 8 的 Collections 类提供静态方法操作集合,核心功能包括: 排序操作 sort() 支持自然排序(Comparable)和定制排序(Comparator) reverse() 通过索引交换或迭代器反转列表顺序 针对 RandomAccess 列表优化性能 搜索与同步 binarySearch() 对有序列表进行二分查找,区分随机访问和迭代访问 synchronizedList() 通过内部类包装实现线程安全,所有方法加锁 不可变集合 un原创 2025-06-26 00:06:11 · 536 阅读 · 0 评论 -
JDK 8 Arrays 详解及详细源码展示
Java 8的Arrays类提供了丰富的数组操作功能,包括排序、搜索、填充、复制和流式处理。核心功能解析:基本类型采用双轴快速排序(DualPivotQuicksort),对象类型使用TimSort;二分查找采用优化后的算法;支持多维数组的深度比较(deepEquals);新增流式处理(stream)支持函数式编程。源码分析显示其通过静态方法实现高效数组操作,兼顾性能与稳定性。原创 2025-06-26 00:05:54 · 587 阅读 · 0 评论 -
JDK 8 PriorityQueue 详解及详细源码展示
JDK 8 PriorityQueue 解析摘要 JDK 8 的 PriorityQueue 是基于二叉堆实现的优先级队列,支持按照自然顺序或自定义比较器排序。其核心数据结构采用数组存储的完全二叉树,通过 siftUp 和 siftDown 方法维护堆性质。插入(offer)和删除(poll)操作的时间复杂度为 O(log n),查看堆顶(peek)为 O(1)。初始容量为 11,扩容策略为小容量翻倍、大容量增加 50%。非线程安全,不允许 null 元素,迭代遍历不保证顺序。典型应用场景包括任务调度和 T原创 2025-06-26 00:05:38 · 903 阅读 · 0 评论 -
JDK 8 ArrayDeque 详解及详细源码展示
JDK 8的ArrayDeque是基于循环数组实现的高效双端队列数据结构。它支持在队列两端进行O(1)时间复杂度的插入和删除操作,采用位运算优化索引计算,初始容量为16并在满时翻倍扩容。作为非线程安全集合,它既可作为栈(LIFO)又可作为队列(FIFO)使用,比Stack和LinkedList性能更优,常用于滑动窗口等算法场景。其核心特点包括循环数组存储、自动扩容机制、禁止null元素以及高效的头尾操作。原创 2025-06-26 00:05:17 · 552 阅读 · 0 评论 -
JDK 8 TreeMap 详解及详细源码展示
摘要: JDK 8 的 TreeMap 是基于红黑树的有序映射表,继承 AbstractMap 并实现 NavigableMap 接口,支持按键的自然顺序或自定义比较器排序。其核心特性包括: 有序性:键按自然顺序或比较器排序,操作时间复杂度为 O(log n)。 键唯一:不允许重复键,默认禁用 null 键(自然排序时)。 导航方法:提供 ceilingKey、floorKey 等高效查找功能。 结构实现: 内部通过红黑树(Entry 节点)维护键值对,包含父/子指针和颜色标记。 构造方法支持自然排序、自定原创 2025-06-26 00:05:00 · 557 阅读 · 0 评论 -
JDK 8 TreeSet 详解及详细源码展示
JDK 8的TreeSet是基于红黑树实现的有序集合,继承自AbstractSet并实现NavigableSet接口。它通过TreeMap存储元素,保证元素按自然顺序或比较器排序,不支持null值。核心特性包括高效的范围查询(headSet/tailSet)、元素唯一性(基于比较而非equals)和非线程安全。源码分析显示其关键操作(add/contains/remove)都委托给TreeMap实现。适用于需要排序、去重或范围查询的场景,但要注意比较器一致性、null值限制和线程安全问题。相比HashSet原创 2025-06-26 00:04:33 · 555 阅读 · 0 评论 -
JDK 8 HashSet 详解及详细源码展示
JDK 8中的HashSet是基于HashMap实现的无序集合,内部使用HashMap存储元素(元素作为键,固定对象PRESENT作为值)。它提供O(1)时间复杂度的增删查操作,通过equals()和hashCode()保证元素唯一性。HashSet不保证迭代顺序,非线程安全,适合去重和快速查找场景。使用时需注意哈希码稳定性、线程安全等问题,有序需求可改用LinkedHashSet。核心优势在于利用HashMap实现高效集合操作,理解其底层实现有助于正确使用。原创 2025-06-26 00:04:16 · 946 阅读 · 0 评论 -
JDK 8 Thread 详解及详细源码展示
Java 8的Thread类是实现多线程编程的核心组件,封装了操作系统线程机制。它的核心概念包括六种线程状态(NEW、RUNNABLE等)、优先级设置(1-10)和守护线程特性。源码分析显示,Thread类通过native方法start0()启动线程,run()方法执行Runnable任务,并提供了sleep()等基础线程控制方法。其初始化过程涉及线程组管理、安全检查、优先级继承等机制。该设计合理封装了底层线程操作,为Java并发编程提供了基础支持。原创 2025-06-26 00:03:53 · 1056 阅读 · 0 评论 -
深度剖析JDK 8中Object:源码级解读与实战探秘
摘要 JDK 8中的Object类是Java所有类的根父类,为所有对象提供基础方法和统一规范。本文从源码层面深入解析Object类,重点剖析其核心方法:getClass()返回对象运行时类;hashCode()提供哈希码用于哈希表;equals()默认实现对象地址比较;clone()实现浅拷贝,需配合Cloneable接口使用。文章还探讨了静态初始化块、native方法注册机制,以及方法重写的规范要求。通过源码分析揭示Object类的设计思想,为理解Java对象基础行为和实现自定义类提供理论依据。原创 2025-06-26 00:03:36 · 686 阅读 · 0 评论 -
深度剖析JDK 8中String:源码级解读与实战探秘
本文深度剖析了JDK 8中String类的核心特性与实现机制。String作为不可变类,其final修饰的char数组保证了对象内容的不可更改性,字符串常量池则实现了字符串共享机制。通过源码分析,文章详细解读了String的内存结构(包含堆内存中的字符串常量池)、关键构造方法(如char数组复制机制)以及常用方法实现(如equals的逐字符比较、hashCode的31倍乘算法)。特别解析了new String("abc")创建两个对象的内存原理,以及intern()方法的字符串池化机制,原创 2025-06-26 00:03:19 · 662 阅读 · 0 评论 -
JDK 8 Objects 详解及详细源码展示
JDK 8 引入的 Objects 工具类提供了一系列静态方法用于安全操作对象,包括空值检查(requireNonNull、isNull)、对象比较(equals、deepEquals)、哈希码生成(hash、hashCode)和字符串处理(toString)等功能。这些方法通过防御性编程和空值安全处理,有效避免了 NullPointerException,提高了代码健壮性。该类方法均为无状态且线程安全,适用于参数校验、对象比较等常见场景,是JDK 8中提升代码质量的实用工具。原创 2025-06-26 00:02:54 · 498 阅读 · 0 评论 -
JDK 8 WeakHashMap 详解及详细源码展示
《JDK 8 WeakHashMap机制解析》摘要: WeakHashMap采用弱引用(WeakReference)管理键对象,当键失去强引用时会被GC自动回收,对应的键值对会在后续操作中被清理(通过ReferenceQueue机制实现)。其内部结构与HashMap类似(数组+链表),但键存储为弱引用,值仍为强引用。核心方法如put/get会先调用expungeStaleEntries()清理失效条目,扩容逻辑与HashMap相似。这种特性使其特别适合缓存场景,但需注意:1)清理操作非实时触发;2)值对象仍原创 2025-06-26 00:02:31 · 732 阅读 · 0 评论