java
文章平均质量分 76
w7sss
这个作者很懒,什么都没留下…
展开
-
回首Spring源码之IOC:prepareBeanFactory
前言上篇讲到了基于注解的容器AnnotationConfigApplicationContext的创建过程,紧接着就是容器的加载refresh,这是spring ioc的主流程,里面包含了多个阶段的逻辑,主要分析一下刷新容器的几个主要方法,本篇着重分析容器刷新前的准备工作prepareBeanFactory。prepareBeanFactory首先进入AbstractApplicationContext#refresh:public void refresh() throw...原创 2022-03-30 12:48:23 · 1915 阅读 · 0 评论 -
回首Spring源码之IOC:AnnotationConfigApplicationContext
前言Spring作为java web的一款开发框架已经演进了许多年,当初Spring也是笔者源码阅读的开端,故借以回首,更求精进。本篇源码基于Spring 5.x。现在开发者多以注解方式使用spring,spring的配置文件时代早成了过去时,所以本篇主要从基于配置文件的容器: AnnotationConfigApplicationContext开始分析。AnnotationConfigApplicationContext启动容器:public static void main(Str原创 2022-03-29 18:26:12 · 2150 阅读 · 0 评论 -
RocketMQ源码之高性能组件MessageStore(MappedFile)
前言前篇介绍了rocketmq启动的各个组件的功能,本篇着重分析使rocketmq能够抗住10万级吞吐的高性能消息持久化组件MessageStore,它是一个commitlog存储库,底层使用了c语言的内存映射函数mmap,实现了内存零拷贝。前置知识:java MappedByteBuffer。MappedByteBufferMappedByteBuffer是mmap的java实现,继承自ByteBuffer,它是一个映射了的字节缓冲区,可以将一个文件映射到直接内存中,java程序可以通过在这个原创 2022-03-28 17:25:11 · 558 阅读 · 0 评论 -
RocketMQ源码之Broker启动原理(一)
前言rocketmq作为一个越来越流行的消息中间件,被广泛使用,本文主要分析Broker的启动原理,主要是Broker的各个服务组件以及主要配置属性的介绍,会略过一些次要代码。Broker初始化broker会从BrokerStartup的main方法启动:public static void main(String[] args) { start(createBrokerController(args));}//创建BrokerControllerpublic s原创 2022-03-26 13:23:48 · 862 阅读 · 0 评论 -
Zookeeper源码之集群选举
前言zookeeper算是一个流行的分布式协调框架,在大量java分布式中间件中广泛使用。在学习zookeeper的源码前建议先了解一下分布式一致性协议的概念,zookeeper自己实现了一套满足cp的一致性协议zab。本篇将会先从zookeeper服务器启动讲起,主要内容为各节点启动后的集群选举。本篇源码版本为3.5.8,因为zookeeper的源码说实话在各个java写的中间件中是属于非常复杂的,而且有些代码写的并不规范,对阅读者并不友好。本篇只关注主流程核心源码,一些次要的逻辑会略过。集群选举原创 2022-03-23 21:20:51 · 3871 阅读 · 0 评论 -
Netty源码之EventLoop工作原理
前言上一篇分析了Netty服务端启动原理,本篇会详细介绍Netty服务启动后的工作流程。NioEventLoopNetty线程模型中,NioEventLoop是一个非常重要的类,把netty服务看成是一个工厂,bossGroup中的NioEventLoop负责分配任务,而workerGroup中的NioEventLoop就是干活的工人,也就是处理读写事件。 上篇讲到Netty服务启动后,bossGroup中的NioEventLoop就开始工作,下面就从NioE...原创 2022-03-22 13:47:17 · 2218 阅读 · 0 评论 -
Netty源码之ServerBootstrap启动原理
前言阅读netty源码之前建议先了解下netty相关的线程模型,推荐Doug Lea的Scalable IO in Java。并且熟悉java NIO的基本使用。启动流程下面是一个常见的netty启动方法:public static void main(String[] args) throws Exception { EventLoopGroup bossGroup = new NioEventLoopGroup(1); EventLoop...原创 2022-03-19 21:55:57 · 2559 阅读 · 0 评论 -
Dubbo服务导出流程分解一张图(v2.7.8)
dubbo服务导出流程图原创 2022-03-08 17:48:55 · 198 阅读 · 0 评论 -
阻塞队列ArrayBlockingQueue源码解读
阻塞队列ArrayBlockingQueue源码解读目录阻塞队列ArrayBlockingQueue源码解读前言源码解读前言BlockingQueue,是java.util.concurrent 包提供的用于解决并发生产者 - 消费者问题的最有用的类,它的特性是在任意时刻只有一个线程可以进行take或者put操作,并且BlockingQueue提供了超时return null的机制,在许多生产场景里如线程池都可以看到这个工具的身影。常见的4种阻塞队列:ArrayBlockin原创 2021-06-01 19:32:53 · 112 阅读 · 0 评论 -
Reentantlock源码解读
Reentantlock源码解读目录Reentantlock源码解读前言源码解读前言ReentrantLock是一种基于AQS框架的应用实现,是JDK中的一种线程并发访问的同步手段,它的功能类似于synchronized是一种互斥锁,可以保证线程安全。而且它具有比synchronized更多的特性,比如它支持手动加锁与解锁,支持加锁的公平性。至于AQS,不用多说它的核心地位,它是整个java并发包JUC的基石。AQS定义了一套多线程访问共享资源的同步器框架。源码解读话不多说.原创 2021-05-31 21:21:41 · 160 阅读 · 0 评论 -
透彻理解MySql MVCC机制
Mysql在可重复读隔离级别下如何保证事务较高的隔离性,我们上节课给大家演示过,同样的sql查询语句在一个事务里多次执行查询结果相同,就算其它事务对数据有修改也不会影响当前事务sql语句的查询结果。这个隔离性就是靠MVCC(Multi-Version Concurrency Control)机制来保证的,对一行数据的读和写两个操作默认是不会通过加锁互斥来保证隔离性,避免了频繁加锁互斥,而在串行化隔离级别为了保证较高的隔离性是通过将所有操作加锁互斥来实现的。Mysql在读已提交和可重复读隔离级别下都原创 2021-05-27 20:34:51 · 222 阅读 · 0 评论 -
MySql JOIN关联查询优化
MySql JOIN关联查询优化目录MySql JOIN关联查询优化嵌套循环连接 Nested-Loop Join(NLJ) 算法基于块的嵌套循环连接 Block Nested-Loop Join(BNL)算法优化建议嵌套循环连接 Nested-Loop Join(NLJ) 算法mysql的表关联常见有两种算法:Nested-Loop Join 算法 Block Nested-Loop Join 算法下面来看Nested-Loop Join 算法。一次一行循环地.原创 2021-05-26 19:35:12 · 247 阅读 · 0 评论 -
深入浅出java常量池和基本数据类型对象池
深入浅出java常量池和基本数据类型对象池目录深入浅出java常量池字节码常量池和运行时常量池字符串常量池基本数据类型的对象池原创 2021-05-25 22:14:48 · 239 阅读 · 0 评论 -
G1垃圾收集器详解
G1垃圾收集器详解目录G1介绍G1垃圾收集原理G1相较CMS等垃圾收集器的优势G1介绍G1 (Garbage-First)是一款面向服务器的垃圾收集器,主要针对配备多颗处理器及大容量内存的机器。以极高概率满足GC停顿时间要求的同时,还具备高吞吐量性能特征。jvm垃圾收集器发展到G1,堆内存已不再有物理上的分代机制,但是还是保留了分代的概念。具体来说,G1将Java堆划分为多个大小相等的独立区域(Region),JVM最多可以有2048个Region。一般Region大小...原创 2021-05-25 16:25:18 · 177 阅读 · 0 评论 -
CMS垃圾收集器与三色标记算法详解
CMS垃圾收集器与三色标记算法详解 目录 CMS垃圾收集器详解 垃圾收集器前世今生 CMS垃圾收集器原理 三色标记算法 垃圾收集器的前世今生 现代垃圾收集器都是基于分代收集理论,将java对象按年龄分为新生代和老年代。其中新生代主要采用标记-复制算法以提高效率。老生代通常使用标记-整理和标记-清除算法。jvm的垃圾收集器已经经历了多代的发展:Serial:Serial(串行)收集器是最基本、历史最悠久的垃圾收集器,这个收集器是一个单线程收集器,它在进行垃圾收集工作的时候必须原创 2021-05-25 12:16:12 · 2240 阅读 · 1 评论 -
深入浅出java类加载原理并实现自定义类加载器
文章目录前言 一、java中的类加载是什么? 二、类加载的过程 三、双亲委派机制 四、自定义类加载器前言Java中的类加载器在开发过程中大家想必都听过,大多数人却接触的不多,但是这是jdk中一个非常核心的组件。一、java中的类加载是什么?简单的来说就是把编译好的class文件通过jdk的类加载器从磁盘载入jvm,变成我们可以使用的java类。二、类加载的过程一个java类的加载主要分为以下几个步骤:加载(从磁盘载入class字节码) >> ...原创 2021-05-10 15:56:57 · 514 阅读 · 0 评论