没有进步就是退步

个人博客:https://callmejiagu.github.io/

IO多路复用底层原理分析

前言 最近一直忙着找实习以及小论文的实验,导致最近半个月都没有汲取到新的知识,也就这两天空闲的时候才能继续看看Netty。其实网上关于Netty的文章很多,但是能够从底层原理去解释的却不多,我们都知道Netty底层是通过IO多路复用来实现的,那么你们有没有考虑过在底层上IO多路复用又是是如何实现的...

2019-04-10 21:43:44

阅读数 31

评论数 0

如何定位生产环境中的问题(Java)

前言 相信大家在平时工作中,或多或少遇到过些棘手的问题,如CPU负载过高、内存溢出、频繁Full GC等。对刚接触工作的同学来说的确是不知道从哪入手,所以这里我简单介绍一下上面三种问题该如何去定位以及解决,当然解决的方式是不一的,可以根据具体环境的问题灵活使用。 TOP 命令解析 Linux中t...

2019-03-14 21:14:36

阅读数 136

评论数 0

多线程并发 之 synchronized 锁的优化

为了提高阅读的体验,可以点击这里 前言 早期版本的synchronized在性能上比较差,好在Jdk1.6之后对其进行种种优化,那么这篇我们就来学习一下synchronized锁都有哪些优化操作!因为网上关于这块的解析比较多了,所以基础如自旋、Mark Word就不再复述了,主要讲我对锁优化的认识...

2019-01-06 14:05:28

阅读数 82

评论数 0

FileChannle 和 MMAP 高性能分析

前言 上一篇的博客中,我从底层上分析了BufferInputStream为什么效率会比FileInputStream来得高,这两种方式都是传统的IO,在JDK1.4 中NIO又多了两种新的IO方式:FileChannle 和 MMAP。这里着重来解释FileChannle的高性能的场景。 Fil...

2018-12-30 12:39:28

阅读数 140

评论数 0

BufferedInputStream 底层原理解析

前言 RMQ中为了实现高性能在IO上做了很多优化,在阿里中间件性能挑战赛也可以看到很多大神们在IO上花了很多功夫去分析优化,这篇主要来解析一下BufferedInputStream的实现原理,看看它在IO上做了哪些优化。 误区 看到很多文章是这么描述BufferedInputStream性能高的...

2018-12-28 10:57:08

阅读数 117

评论数 0

内存映射 mmap的理解(转载+整理)

前言 上一篇解释了RMQ为了提高大文件的读写效率,使用了内存映射的方法,将磁盘上的文件与进程中的进程虚拟空间进行了映射,减少一次内核空间到用户空间的一次复制。看到这里我就有了疑惑,既然内存映射有这么好的特性,为什么还需要传统的IO呢?看下文的分析。 进程中的虚拟内存 mmap是将文件与进程虚拟空...

2018-12-21 19:47:10

阅读数 300

评论数 0

RocketMQ 源码分析 消息存储(预备知识二)(转载+整理)

前言 在RMQ中为了提高commitlog文件的读写效率,而采用了一个叫做内存映射的技术。按照我的理解,内存映射在处理大文件上有非常大的性能提升,所以这篇来记录一下我对内存映射的理解。 用户态和内核态 我们都知道操作系统分为用户态和内核态,内核态表示当前为内核程序执行时的状态,用户态是用户程序代...

2018-12-21 09:31:04

阅读数 85

评论数 1

RocketMQ 源码分析 消息存储(预备知识一)

前言 看到RocketMQ的性能问题的时候,通常能看到page cache、顺序IO写、预读等,要想设计出一个高性能的中间件,这部分的知识是绝对要掌握的。 顺序IO读写为什么速度更快 当需要从硬盘上读取一个文件时,首先会要求磁头定位到这个文件的起始扇区。这个定位过程包括两个步骤: 磁头定位到对应...

2018-12-19 12:45:14

阅读数 87

评论数 0

读源码感

前言 最近的时间差不多都围绕着RocketMQ的学习上,一开始从了解RocketMQ的场景到RocketMQ的一个使用,然后到源码的阅读。前面两个过程无需多说,到了读源码的阶段,我时常问自己,读这份源码的意义在于哪? 感想 我从namesrv的启动类入手开始阅读,作为切入点我觉得没错,但是时常因...

2018-12-19 12:44:28

阅读数 101

评论数 0

RocketMQ 源码分析 BrokerStartUp(七)

前言 broker是消息接收处理,消息落地的核心模块。这个模块用于接收producer发送的消息以及consumer消费的消息。 本章从broker的启动类入手分析一下broker启动的过程。 分析broker是为了能够搞明白master和slave之间的关系,以及消息落地的具体过程。 crea...

2018-12-14 12:02:48

阅读数 174

评论数 0

RocketMQ 源码分析 NettyRemotingServer(六)

前言 已经写了几篇关于RocketMQ源码的分析,可能对其逻辑处理会多一点认识,但还没深入到RocketMQ精髓中。比如MQ中的通信是如何实现的、如何实现高性能,高可用、最终一致性、MQ 消息存储。这些才是我们阅读源码的一个目标。所以这篇通过分析源码的来了解一下RocketMQ通信机制。 本文很大...

2018-12-14 12:01:36

阅读数 118

评论数 0

RocketMQ 源码分析 BrokerHousekeepingService(五)

前言 RocketMQ在早期版本使用的是Zookeeper,考虑到Zookeeper不够轻量,后面用namesrv来代替。熟悉Zookeeper的知道它使用心跳检测来判断服务是否正常,那么namesrv肯定也少不了这块功能,那么它是怎么判断一个Broker节点是否Live呢?如果一个Broker断...

2018-12-13 09:13:19

阅读数 61

评论数 0

RocketMQ 源码分析 RouteInfoManager(四)

前言 在上一章分析了NamesrvController的构造函数时,会生成一个RouteInfoManager对象,该对象存放着整个消息集群的相关消息,所以这里单独拿出来分析。其实试想一下namesrv的功能不就是一个提供了通信功能的一个队列嘛,而RouteInfoManager保留了所有信息的路...

2018-12-12 09:40:05

阅读数 128

评论数 1

RocketMQ 源码分析 NamesrvController(三)

前言 上一篇在讲到createNamesrvController方法的时候,根据NamesrvConfig和NettyServerConfig对象生成了一个NamesrvController对象,当时并没有deep到该类中,所以这篇来记录一下NamesrvController构造函数的分析。 N...

2018-12-11 09:34:38

阅读数 108

评论数 0

RocketMQ 源码分析 NamesrvStartup(二)

前言 上一篇讲到使用命令行启动namesrv时,最终会以NamesrvStartup作为为启动类,所以这篇主要来记录一下NamesrvStartup的源码分析。分析的RocketMQ的版本是4.3.1。 NamesrvStartup 首先我觉得在看源码的时候,需要把握住一个类的大概流程,而不是看...

2018-12-11 09:30:31

阅读数 132

评论数 0

RocketMQ 源码分析 nameser启动(一)

前言 在RocketMQ中,NameServer的目的是为了解耦Broker和Producer、Consumer。官方文档对NameServer有一个概括:NameServer是一个几乎无状态节点,可集群部署,节点之间无任何信息同步。而且在启动MQ的时候,第一个启动必须是NameServer。所以...

2018-12-08 20:31:09

阅读数 159

评论数 0

基于MySQL网络通信协议 编写自己的JDBC

基于MySQL网络协议实现自己的数据库驱动。主要是利用Wireshark解析MySQL的packet,使用Socket实现通信。具体实现思路可以点击下方的个人博客查看 。代码上传至GitHub。 在实现功能,借鉴了 sea-boat的packet实现,在其基础上进行功能块的编写,如查询功能可以看下...

2018-11-02 16:00:01

阅读数 265

评论数 0

Cglib源码分析 invoke和invokeSuper的差别

Cglib的实例 本文重在源码的分析,Cglib的使用不再复述。 //被代理类 public class InfoDemo { public void welcome (String person){ System.out.println("welco...

2018-03-17 17:06:20

阅读数 2954

评论数 0

Java并发编程 之 同步队列与等待队列

在上一篇博客中,我简单的介绍了对Condition和ReentrantLock的使用,但是想要更好的掌握多线程编程,单单会用是不够的。 这篇我会针对Condition方法中的await和signal的实现原理来梳理一下我的理解。首先我们需要了解同步队列和等待队列的概念。简单的理解是同步队列存放着竞...

2017-09-29 16:57:56

阅读数 5932

评论数 2

Apache Shiro源码 拦截器过程

Apache Shiro是Java的一个安全框架,使用的人也越来越多,但很多人只是停留在了会使用的的阶段,可能配置文件也只是网上demo的复制修改,却不知道真正的含义是什么。 今天我用shiro的拦截器为入口,简单的过一点shiro的源码 ,有错误的地方希望大家能给指出。首先我们看一下配置文件中拦...

2017-08-18 20:01:07

阅读数 2071

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭