源码解读
文章平均质量分 95
解读源码
码到三十五
搬的每块砖,皆为峰峦之基。公众号:[码到三十五],wx交流: [liwu0213]
展开
-
Java Stream中ReferencePipeline浅析
Java 8 引入的 Stream API 中,ReferencePipeline 类扮演着核心角色,它是处理引用类型(如 List、Set 等)流的核心实现。通过 ReferencePipeline,Java 提供了一种高效且易于理解的方式来处理数据集合,支持复杂的查询/转换操作,并可以利用现代多核处理器的并行处理能力。本文将详细解析 ReferencePipeline 类的源码,探讨其设计原理和工作机制。原创 2024-08-20 21:00:00 · 2122 阅读 · 7 评论 -
Java Stream 实现原理浅析
Java Stream API 的实现原理是一个高度优化和灵活的过程,它基于函数式编程的概念,并结合了现代多核处理器的特性。通过惰性求值、内部迭代、并行处理以及多种优化措施,Stream API 提供了一种强大且高效的方式来处理数据集合。无论是处理简单的数据集合还是复杂的数据流,Stream API 都是 Java 开发者不可或缺的工具之一。原创 2024-08-20 08:00:00 · 1812 阅读 · 4 评论 -
Java Stream中的Spliterator类深入解析
在Java的Stream API中,Spliterator(可分割迭代器)是一个至关重要的接口,它提供了遍历和分割数据源的能力,从而支持高效的并行处理。以下是对Spliterator的详细解析,包括其概念、原理、作用、类中定义的方法以及在Stream API中的应用。原创 2024-08-19 21:15:00 · 1543 阅读 · 0 评论 -
Java Stream中的StreamSupport类
Java Stream中的StreamSupport类的主要作用是作为桥梁,将底层的数据源(如)转换为Stream API中的Stream对象。由于Stream API的设计目标是提供一种高级的迭代器抽象,它本身并不直接操作数据源,而是依赖于来遍历和操作元素。因此,类在将传统集合或自定义数据源转换为Stream时起着关键作用。原创 2024-08-19 17:15:00 · 1075 阅读 · 0 评论 -
深入理解Apache Commons Pool2池化技术
Apache Commons Pool2是Apache Commons下的一个开源项目,主要用于实现和管理对象池。对象池是一种常见的设计模式,通过复用来分摊昂贵对象的创建和销毁代价,从而优化资源利用和提高应用程序性能。Commons Pool2提供了一套用于实现对象池化的API,并内置了多种各具特色的对象池实现。其被广泛应用在各种数据库连接池、线程池以及请求分发池中。其实现提供了一些参数来控制对象池的行为,例如最大池化对象数、最大空闲时间、最小空闲数等,可以根据不同的应用场景进行灵活配置。原创 2024-03-13 11:33:08 · 7177 阅读 · 20 评论 -
CopyOnWriteArrayList:深入理解Java中的线程安全List原理和应用
CopyOnWrite,也被称为写时复制(Copy-On-Write,简称COW),是程序设计领域中的一种优化策略。这种策略的核心思想是,当多个调用者(或线程)同时访问同一份资源时,他们会共同获取一个指向该资源的指针。只要没有调用者尝试修改这份资源,所有的调用者都可以继续访问同一个资源。但是,一旦有调用者尝试修改资源,系统就会复制一份该资源的副本给这个调用者,而其他调用者所见到的仍然是原来的资源。这个过程对其他的调用者都是透明的,他们并不知道资源已经被复制。原创 2024-03-11 10:10:05 · 1996 阅读 · 0 评论 -
Jackson行为特征SerializationFeature和DeserializationFeature【收藏】
Jackson 库中,SerializationFeature 和 DeserializationFeature 是用于配置序列化和反序列化行为的枚举类。它们分别用于控制对象的序列化和反序列化过程中的各种特性和选项,通过在序列化和反序列化过程中配置这些特性,可以灵活控制 JSON 数据的解析和生成方式。原创 2023-08-23 14:35:40 · 2132 阅读 · 0 评论 -
深入解析JVM内存分配优化技术:TLAB
TLAB作为JVM内存分配优化的一种关键技术,通过为每个线程分配私有的内存区域,有效地减少了锁竞争、提升了缓存局部性,并降低了垃圾收集的开销。在实际应用中,通过合理调整TLAB的大小、实时监控和调优,以及结合其他JVM优化技术,可以进一步提升程序的性能。对于追求高性能的Java应用程序来说,深入理解和应用TLAB技术是非常有价值的。原创 2024-01-09 17:29:00 · 1326 阅读 · 0 评论 -
基于Guava布隆过滤器的海量字符串高效去重实践
布隆过滤器(Bloom Filter)是一种空间效率极高的概率型数据结构,它利用位数组表示集合,并使用哈希函数将元素映射到位数组的某些位置。布隆过滤器并不直接存储数据本身,而是通过位数组中的特定位来表示数据是否存在。原创 2024-01-23 20:36:33 · 1369 阅读 · 0 评论 -
实现自定义序列化和反序列化控制的5种方式
在 Jackson 中,你可以通过多种方式来实现自定义的序列化和反序列化控制。自定义 Serializer 和 Deserialize,使用 Mix-in Annotations,注解如 @JsonSerialize 和 @JsonDeserialize,自定义的模块或者处理器如 SimpleModule 或者 HandlerInstantiator,使用 JsonSerializerModifier 和 BeanSerializerModifie原创 2023-11-14 13:55:39 · 4627 阅读 · 1 评论 -
深入理解Java SPI:服务发现与扩展的利器(一)
Java SPI(Service Provider Interface)是Java提供的一种服务发现机制,它允许第三方为某些接口提供实现,并在运行时被动态加载。本文将从基础概念入手,逐步深入解析Java SPI的实现机制,并通过实例演示其使用方法。同时,我们还将探讨Java SPI的优点和潜在问题,并给出实际开发中的应用建议原创 2024-02-17 10:56:44 · 1001 阅读 · 0 评论 -
重温JAVA线程池精髓:Executor、ExecutorService及Executors的源码剖析与应用指南
在Java并发编程中,线程池是一个非常重要的概念。它可以帮助我们更好地管理和控制线程的使用,避免因为大量线程的创建和销毁带来的性能开销。Java的java.util.concurrent(简称JUC)包中提供了一套丰富的线程池工具,包括Executor接口、ExecutorService接口以及Executors工厂类等。本文将详细介绍这些工具的使用和原理,帮助大家更好地理解和应用Java中的线程池技术原创 2024-03-15 08:30:00 · 3375 阅读 · 116 评论 -
深入剖析Java中的CountDownLatch:同步协作的利器
CountDownLatch通过结合AQS的强大同步机制,实现了线程之间的精确同步。它利用AQS的state字段来管理计数器值,通过原子性操作和FIFO队列来确保多线程环境下的正确性和性能。了解CountDownLatch与AQS的结合使用方式,有助于我们更深入地理解并发编程中的同步机制。原创 2024-03-14 08:30:00 · 3282 阅读 · 26 评论 -
JVM逃逸分析原理解析:优化Java程序性能和内存利用效率
逃逸分析是一种用于确定对象在方法的生命周期内是否逃逸出方法外部范围的技术。在Java开发中,逃逸分析用于确定对象的生命周期和作用域,以便进行相应的优化,提高程序的性能和内存利用效率。当一个对象被创建后,它可以在方法内部使用,也可以被传递给其他方法或线程,并在方法外部继续存在。如果对象没有逃逸出方法的作用域,那么JVM可以将其分配在栈上而不是堆上,从而避免了堆内存的分配和垃圾回收的开销。JVM逃逸分析通过静态和动态两种分析方法,确定对象是否可能逃逸出方法的范围。原创 2024-01-16 14:31:51 · 1903 阅读 · 0 评论 -
揭秘Java并发包(JUC)的基石:AQS原理和应用
在Java并发编程中,同步器(Synchronizer)是一种非常关键的机制,用于协调和控制多个线程对共享资源的访问。其中,AbstractQueuedSynchronizer(简称AQS)是Java并发包java.util.concurrent.locks下提供的一个同步器框架,它为实现依赖于先进先出 (FIFO) 等待队列的阻塞锁和相关的同步器(如计数器、事件、信号量等)提供了一个基础框架。原创 2024-01-25 18:25:13 · 1404 阅读 · 0 评论 -
深入探究Java中的TransferQueue:机制、特性与应用场景
TransferQueue是Java并发包中的一个强大工具,专为需要精确的数据传递场景而设计。它实现了BlockingQueue接口,但提供了更为独特的transfer和tryTransfer方法,允许生产者和消费者之间以同步的方式进行数据的直接传递。当生产者生成数据项时,它可以等待直到有消费者准备好接收;同样地,当消费者需要数据时,它可以等待直到有生产者提供。这种机制确保了数据在传递过程中的一致性和准确性,是构建高性能、低延迟并发系统的关键组件之一原创 2024-03-13 08:30:00 · 1549 阅读 · 4 评论 -
jackson序列化和反序列化中的注解和扩展点大全【收藏】
在 Jackson 库中,有多个注解和扩展点来支持我们个性化的序列化和反序列化需求。下面我们来做一个总结,关注常用注解大全,Jackson模块,Jackson的扩展点等等。建议收藏备用。原创 2023-09-18 15:10:22 · 1060 阅读 · 0 评论 -
提升编程效率的利器: 解析Google Guava库之集合篇Immutable(一)
Guava库是Google提供的一套用于扩展Java标准库的开源Java库,它包含许多实用的API,可以大大提高Java开发的效率和代码质量。原创 2024-01-26 14:14:38 · 1798 阅读 · 0 评论 -
深入理解Java中的ForkJoin框架原理
ForkJoin框架是Java并发包(java.util.concurrent)的一部分,主要用于并行计算,特别适合处理可以递归划分成许多子任务的问题,例如大数据处理、并行排序等。该框架的核心思想是将一个大任务拆分成多个小任务(Fork),然后将这些小任务的结果汇总起来(Join),从而达到并行处理的效果。Java中的ForkJoin框架是一个强大而灵活的并行计算工具。通过递归地划分任务和自动地平衡负载,它可以帮助开发者充分利用现代多核处理器的性能。原创 2024-02-01 21:40:17 · 1462 阅读 · 0 评论 -
synchronized同步锁 : 原理到锁升级及历史演进的解析
在Java并发编程中,synchronized关键字是一种非常重要的同步机制,用于控制多个线程对共享资源的访问。本文将详细阐述synchronized的原理、锁升级过程、优缺点、使用案例以及历史演进,帮助读者更好地理解和应用这一机制。原创 2024-01-18 15:58:09 · 3498 阅读 · 0 评论 -
详解JVM内存优化技术:压缩指针
当你提到Java虚拟机(JVM)的内存优化技术时,压缩指针是一项非常重要的技术。在本篇博文中,我们将详细介绍JVM的压缩指针内存优化技术,包括其概念、原理、作用以及可能产生的影响。原创 2024-01-16 14:49:22 · 7054 阅读 · 0 评论 -
深入解析Java中的ForkJoinPool:分而治之,并行处理的利器
ForkJoinPool是Java并发包java.util.concurrent中的一个类,它提供了一个工作窃取算法的实现,能够高效地处理大量可以被拆分成较小子任务的任务。与传统的ExecutorService不同,ForkJoinPool特别适合于递归或分治算法的场景,在这些场景中,一个大任务可以被拆分成多个小任务并行处理,然后再将结果合并。首先,我们需要定义一个继承自RecursiveTask的类来表示求和任务。RecursiveTask是ForkJoinPool中用于有返回值的任务的基类。原创 2024-03-12 08:30:00 · 43008 阅读 · 0 评论 -
JDK 11 vs JDK 8:探索Java的新特性和改进
在JDK 8中,Parallel垃圾回收器是默认的选项,而在JDK 11中,G1垃圾回收器成为了新的默认选择。同时,新的API还提供了更好的错误处理和连接管理功能,有助于提高应用程序的稳定性和可靠性。JDK 11 附带了一个名为 JShell 的新工具,它是一个用于执行 Java 代码的交互式环境,类似于其他语言的 REPL(读取-求值-输出-循环)工具。JDK 11 改进了类的访问控制,引入了基于嵌套的访问控制,允许更精细地控制哪些类或接口可以访问另一个类的成员。引入了一些新的标准库 API,如。原创 2024-02-12 10:46:57 · 2312 阅读 · 0 评论 -
深入探索Java并发编程:ArrayBlockingQueue详解
在Java的并发编程世界中,java.util.concurrent包为我们提供了多种用于线程间安全通信的数据结构,其中ArrayBlockingQueue是一个备受瞩目的有界阻塞队列。本文将全面深入地介绍ArrayBlockingQueue的内部机制、使用场景以及最佳实践。原创 2024-03-16 15:14:53 · 1197 阅读 · 4 评论 -
详解Jackson的动态属性设置@JsonAnyGetter和@JsonAnySetter
在反序列化过程中,Jackson 会调用带有 @JsonAnySetter 注解的方法,将动态属性设置到对象的 dynamicProps 属性中。通过在 User 类的 getDynamicProps() 方法上使用 @JsonAnyGetter 注解,我们告诉 Jackson 在序列化过程中将动态属性包含在 JSON 中。在示例的 main() 方法中,我们创建了一个 JSON 字符串,其中包含了动态属性 “email” 和 “phone”,以及固定属性 “name” 和 “age”。原创 2023-09-15 18:21:27 · 1274 阅读 · 0 评论 -
JVM垃圾回收的历史演进:从GC算法到垃圾回收器选择
JVM(Java虚拟机)垃圾回收技术是Java语言的核心特性之一,它通过自动管理内存的分配和释放,减轻了开发人员的负担。本文将详细介绍JVM垃圾回收的历史演进过程,包括GC算法、设计思想、主要解决问题以及垃圾回收器的选择。原创 2024-01-17 16:29:27 · 1297 阅读 · 0 评论 -
深入理解Java中的ConcurrentSkipListMap:高效并发的有序映射
本文将详细介绍Java中的ConcurrentSkipListMap,一个支持高效并发操作的有序映射。我们将深入探讨其数据结构、工作原理、性能特点以及使用场景,帮助读者更好地理解和应用这一强大的数据结构。原创 2024-03-12 11:36:40 · 1878 阅读 · 1 评论 -
Java中的LinkedBlockingQueue:原理、应用与性能深入剖析
LinkedBlockingQueue,如其名,是一个基于链接节点的、线程安全的队列。它不仅可以作为生产者-消费者模式中的核心组件,帮助我们在多线程环境下安全地传递数据,还可以利用其阻塞特性,有效地协调生产和消费的速度,使得系统更为稳定、高效。但LinkedBlockingQueue背后的原理、应用场景以及性能特性,你是否真正了解呢?这篇博客,将带你深入Java并发编程的世界,一起探索LinkedBlockingQueue的每一个角落。原创 2024-03-14 11:39:16 · 1812 阅读 · 20 评论 -
JVM的即时编译(JIT)优化原理:加速程序的执行
在传统的编程语言中,代码通常是通过编译器将源代码直接转换成机器码,然后由计算机硬件执行。而Java是一种基于虚拟机(JVM)的编程语言,它使用了一种不同的执行模型。Java代码首先被编译成字节码,然后由JVM在运行时进行解释执行。但是,解释执行的效率较低,为了提高Java应用程序的执行速度,JVM引入了即时编译(JIT)优化技术。原创 2024-01-17 15:54:02 · 1222 阅读 · 0 评论 -
Spring三兄弟:Spring、Spring Boot、Spring Cloud的100个常用注解大盘点
Spring框架通过注解简化了Java企业级应用的开发,实现了依赖注入和组件管理。Spring Boot在此基础上进一步简化了应用的创建和部署,通过自动配置和快捷注解提高了开发效率。而Spring Cloud则为微服务架构提供了全面的解决方案,通过注解集成了服务发现、配置管理等功能,降低了分布式系统的复杂性。三者共同构成了强大且灵活的Java应用开发生态。原创 2024-03-04 11:42:14 · 1322 阅读 · 1 评论 -
Spring Boot 3 升级全解析:新特性与改进点一网打尽
随着Spring Boot的持续发展,其新版本Spring Boot 3已经发布,为开发者带来了诸多新特性和改进。本文旨在深入探索Spring Boot 3的升级点,并分析其可能带来的技术影响与前景。原创 2024-02-27 10:54:30 · 1609 阅读 · 0 评论 -
在Spring Boot中实现类似SPI机制的功能(二)
在Java世界中,SPI(Service Provider Interface)是一种允许第三方为应用程序提供插件式扩展的机制。虽然Spring Boot本身并没有直接实现SPI机制,但由于其构建在强大的Spring框架之上,我们可以利用Spring的依赖注入和扩展机制来实现类似SPI的功能。本文将详细介绍在Spring Boot中如何实现类似SPI的效果,包括基于Java原生的SPI机制、基于Spring的条件化配置、使用FactoryBean、自定义BeanDefinition、监听应用程序事件以及动态原创 2024-02-19 10:20:00 · 1185 阅读 · 0 评论 -
深入解析Spring Batch:企业级批处理框架的技术之旅
Spring Batch是一个开源的、轻量级的批处理框架,它基于Spring框架构建,继承了Spring的诸多优点,如依赖注入、面向切面编程等。Spring Batch旨在简化批处理应用程序的开发,提供了一套丰富的功能来支持事务管理、作业调度、异常处理、日志记录等。Spring Batch是一个完善的批处理框架,旨在帮助企业建立健壮、高效的批处理应用。它是Spring的一个子项目,使用Java语言并基于Spring框架为基础开发,使得已经使用Spring框架的开发者或者企业更容易访问和利用企业服务。原创 2024-02-19 09:51:20 · 27815 阅读 · 0 评论 -
Spring EL表达式:概念、特性与应用深入解析
在Spring框架中,Spring Expression Language(简称Spring EL)是一种功能强大的表达式语言,它支持在运行时查询和操作对象图。本文将详细介绍Spring EL表达式的概念、特点、基本语法和用法,并探讨在Spring框架中的应用场景。同时,我们还将分析Spring EL的优势和局限性,并与其他相关技术进行比较。原创 2024-02-16 11:07:58 · 5016 阅读 · 0 评论 -
Spring Cloud中@RefreshScope实现动态刷新的原理
在现代微服务架构中,Spring Cloud已经成为了一种流行的选择,它提供了许多用于构建和部署微服务的工具和库。其中,动态刷新配置是Spring Cloud中一个非常有用的特性,它允许我们在不重启服务的情况下更新配置。这个特性是通过@RefreshScope注解来实现的。在本文中,我们将深入探讨@RefreshScope在Spring Cloud中是如何工作的。原创 2024-01-30 18:38:02 · 2227 阅读 · 2 评论 -
详解java参数校验之:顺序校验、自定义校验、分组校验(@Validated @GroupSequence)
MethodValidationPostProcessor 会拦截该方法的调用,根据 @Validated 注解和指定的验证分组(MyValidationGroupSequence.class),对 User 对象的属性进行校验。在上述示例中,createUser 方法使用了 @Validated 注解来启用方法参数校验,并通过 @Validated(MyValidationGroupSequence.class) 指定了要验证的分组。原创 2023-08-29 11:47:53 · 2956 阅读 · 2 评论 -
解读spring5源码中实例化单例bean的调用链
在整个过程中,Spring 通过调用一系列的方法和处理器,完成了单例 Bean 的实例化和初始化工作,最终将可用的单例 Bean 放入容器中供其他组件使用。在 Spring 5 的源码中,实例化单例 Bean 的调用链可以从 Spring Boot 的主类 SpringApplication 的 run 方法开始。AbstractBeanFactory.doGetBean 方法:该方法是获取 Bean 实例的核心方法,其中包括了解决循环依赖、实例化 Bean 对象和执行初始化操作等逻辑。原创 2023-07-28 16:30:17 · 140 阅读 · 0 评论 -
spring接口版本控制方案及RequestMappingHandlerMapping接口介绍
RequestMappingHandlerMapping支持多种请求映射的方式,如基于URL路径的请求映射、基于请求方法的请求映射、基于请求头的请求映射等。通过灵活的配置和扩展,可以实现请求的路由、请求的参数解析和数据绑定,以及接口版本控制等功能。RequestMappingHandlerMapping可以处理多种类型的处理器,例如带有@Controller或@RestController注解的类,实现了Controller接口的类,以及其他自定义的处理器类型。在Spring MVC中,可以通过自定义。原创 2023-07-18 18:24:48 · 894 阅读 · 0 评论 -
SpringBoot的源码启动的步骤
5 启动阶段:执行自定义的启动逻辑,如ApplicationRunner和CommandLineRunner接口的实现类。这些阶段的顺序和功能确保了Spring Boot应用程序的正确启动和准备就绪,使应用程序可以正常运行。3 准备阶段:配置ApplicationContext的属性和环境变量,并执行初始化操作。2 创建应用上下文阶段:创建并配置应用的上下文,包括Bean的注册和扫描。如果存在,通过反射执行它们的run()方法,执行自定义的启动逻辑。原创 2023-07-13 17:21:08 · 511 阅读 · 0 评论 -
Spring的Bean的生命周期各个阶段扩展方法
Spring的容器中有很多组件都提供了Aware接口,通过实现这些Aware接口的扩展类,可以向这些组件注入一些Spring容器中的组件,以实现更灵活的定制化。在实例化Bean的过程中,还可以通过实现InstantiationAwareBeanPostProcessor接口来对Bean的属性进行自定义处理。如果某个Bean的配置文件中指定了init-method属性,那么Spring容器会在Bean的属性注入完成后,手动调用该方法进行Bean的初始化。开发者可以实现该接口为Bean提供定制化支持。原创 2023-07-13 16:28:59 · 193 阅读 · 0 评论