摘要: 前言 在 "深入浅出 JVM GC(1)" 中,限于上篇文章的篇幅,我们留下了一个问题 : 如何回收? 这篇文章将重点讲述这个问题。 在上篇文章中,我们也列出了一些大纲,今天我们就按照那个大纲来逐个讲解。在此,我将大纲复制过来。 垃圾回收算法 1. 标记清除算法 2. 复制算法 3. 标记整理算法 阅读全文
posted @ 2018-05-19 23:59 莫那-鲁道 阅读(382) 评论(0) 推荐(0) 编辑
摘要: 前言 初级 Java 程序员步入中级程序员的有一个无法绕过的阶段 GC(Garbage Collection)。作为 Java 程序员,说实话,很幸福,不用像 C 程序员那样,时刻关心着内存,就像网上有句名言 生活从来都不容易,只不过是有人替你负重前行! 是的,GC 在替我们做这些脏活累活,GC 像 阅读全文
posted @ 2018-05-19 23:58 莫那-鲁道 阅读(396) 评论(0) 推荐(1) 编辑
摘要: 引自《深入理解Java 虚拟机》 前言 JVM 运行时数据分为几大部分 1. 程序计数器 2. Java 虚拟机栈 3. 本地方法栈 4. Java 堆 5. 方法区(永久代) 6. 运行时常量池 7. 直接内存 JVM 内存区域 Java 虚拟机在执行Java 程序的过程中会把它所管理的内存划分为 阅读全文
posted @ 2018-05-19 23:57 莫那-鲁道 阅读(487) 评论(0) 推荐(0) 编辑
摘要: 概览 从 JVM 的总体上看,它解决了3个问题: 1. Java 程序的内存管理(GC & 运行时数据区)。 2. Java Class 二进制字节流的加载(ClassLoader)。 3. Java 程序的执行(执行引擎)。 如下图所示: 在我们的日常开发中,最和我们息息相关的就是1和2了,比如 阅读全文
posted @ 2018-05-19 23:56 莫那-鲁道 阅读(460) 评论(0) 推荐(2) 编辑
摘要: 目录: 1. dubbo 的 Consumer 消费者如何使用 Netty 2. dubbo 的 Provider 提供者如何使用 Netty 3. 总结 前言 众所周知,国内知名框架 Dubbo 底层使用的是 Netty 作为网络通信,那么内部到底是如何使用的呢?今天我们就来一探究竟。 1. du 阅读全文
posted @ 2018-05-19 23:55 莫那-鲁道 阅读(11802) 评论(3) 推荐(4) 编辑
摘要: 前言 我们知道,Java 创建一个实例的消耗是不小的,如果没有使用栈上分配和 TLAB,那么就需要使用 CAS 在堆中创建对象。所以现在很多框架都使用对象池。Netty 也不例外,通过重用对象,能够避免频繁创建对象和销毁对象带来的损耗。 来看看具体实现。 1. Recycler 抽象类简介 该类 d 阅读全文
posted @ 2018-05-19 23:54 莫那-鲁道 阅读(1348) 评论(0) 推荐(1) 编辑
摘要: 前言:Netty 提供的心跳介绍 Netty 作为一个网络框架,提供了诸多功能,比如我们之前说的编解码,Netty 准备很多现成的编解码器,同时,Netty 还为我们准备了网络中,非常重要的一个服务 心跳机制。通过心跳检查对方是否有效,这在 RPC 框架中是必不可少的功能。 Netty 提供了 Id 阅读全文
posted @ 2018-05-19 23:54 莫那-鲁道 阅读(453) 评论(0) 推荐(0) 编辑
摘要: Netty 解码器抽象父类 ByteToMessageDecoder 源码解析 阅读全文
posted @ 2018-05-19 23:53 莫那-鲁道 阅读(586) 评论(0) 推荐(0) 编辑
摘要: 前言 在 "Netty 源码剖析之 unSafe.read 方法" 一文中,我们研究了 read 方法的实现,这是读取内容到容器,再看看 Netty 是如何将内容从容器输出 Channel 的吧。 1. ctx.writeAndFlush 方法 当我们调用此方法时,会从当前节点找上一个 outbou 阅读全文
posted @ 2018-05-19 23:51 莫那-鲁道 阅读(443) 评论(0) 推荐(0) 编辑
摘要: 目录: 1. NioSocketChannel$NioSocketChannelUnsafe 的 read 方法 2. 首先看 ByteBufAllocator 3. 再看 RecvByteBufAllocator.Handle 4. 两者如何配合进行内存分配 5. 如何读取到 ByteBuf 6. 阅读全文
posted @ 2018-05-19 23:50 莫那-鲁道 阅读(849) 评论(0) 推荐(0) 编辑
摘要: 目录: 前言 1. ChannelOutboundBuffer 介绍 2. addMessage 方法 3. addFlush 方法 4. flush0 方法 5. 缓冲区扩展思考 6. 总结 每个 ChannelSocket 的 Unsafe 都有一个绑定的 ChannelOutboundBuff 阅读全文
posted @ 2018-05-19 23:50 莫那-鲁道 阅读(6016) 评论(0) 推荐(2) 编辑
摘要: 前言 对于堆外内存,使用 System.gc() 是不靠谱的,依赖老年代 FGC 也是不靠谱的,而且大部分调优指南都设置了 DisableExplicitGC 禁用 System.gc()。所以主动回收比较靠谱, JDK 在 DirectByteBuffer 中提供了 Cleaner 用来主动释放内 阅读全文
posted @ 2018-05-19 23:49 莫那-鲁道 阅读(2083) 评论(0) 推荐(0) 编辑
摘要: 目录大纲: 1. 前言 2. 处理耗时业务的第一种方式 handler 种加入线程池 3. 处理耗时业务的第二种方式 Context 中添加线程池 4. 总结:两种方式的对比和思考 前言 熟悉 Netty 的同学都知道,不能在 Netty 中做耗时的,不可预料的操作,比如数据库,网络请求,这将会严重 阅读全文
posted @ 2018-05-19 23:48 莫那-鲁道 阅读(4520) 评论(0) 推荐(0) 编辑
摘要: 目录大纲: 0. 前言 1. ChannelPipeline | ChannelHandler | ChannelHandlerContext 三巨头介绍 2. 三巨头编织过程(创建过程) 3. ChannelPipeline 是如何调度 handler 的 4. 总结 前言 相信对 Netty 熟 阅读全文
posted @ 2018-05-19 23:47 莫那-鲁道 阅读(561) 评论(0) 推荐(0) 编辑
摘要: 目录大纲: 1. 前言 2. 针对 Netty 例子源码做了哪些修改? 3. 看 pipeline 是如何将数据送到自定义 handler 的 4. 看 pipeline 是如何将数据从自定义 handler 送出的 5. 总结 前言 在 "Netty 核心组件 Pipeline 源码分析(一)之剖 阅读全文
posted @ 2018-05-19 23:47 莫那-鲁道 阅读(519) 评论(0) 推荐(0) 编辑
摘要: 前言 在前文 "Netty 启动过程源码分析 (本文超长慎读)(基于4.1.23)" 中,我们分析了整个服务器端的启动过程。在那篇文章中,我们重点关注了启动过程,而在启动过程中对核心组件并没有进行详细介绍,比如 EventLoop ,Pipeline,Unsafe 等。实际上,Netty 的大部分组 阅读全文
posted @ 2018-05-19 23:46 莫那-鲁道 阅读(949) 评论(1) 推荐(2) 编辑
摘要: 前言 Netty 作为高性能框架,对 JDK 中的很多类都进行了封装了和优化,例如 Thread 类,Netty 使用了 FastThreadLocalRunnable 对所有 DefaultThreadFactory 创建出来的 Runnable 都进行了包装。包装的目的是 run 方法的不同,看 阅读全文
posted @ 2018-05-19 23:46 莫那-鲁道 阅读(949) 评论(1) 推荐(1) 编辑
摘要: 前言 在前文中,我们分析了服务器是如何启动的。而服务器启动后肯定是要接受客户端请求并返回客户端想要的信息的,否则要你服务器干啥子呢?所以,我们今天就分析分析 Netty 在启动之后是如何接受客户端请求的。 开始吧! 1. 从源头开始 从之前服务器启动的源码中,我们得知,服务器最终注册了一个 Acce 阅读全文
posted @ 2018-05-19 23:45 莫那-鲁道 阅读(2530) 评论(0) 推荐(0) 编辑
摘要: 前言 作为一个 Java 程序员,必须知道Java社区最强网络框架 Netty,且必须看过源码,才能说是了解这个框架,否则都是无稽之谈。今天楼主不会讲什么理论和概念,而是使用debug 的方式,走一遍 Netty (服务器)的启动过程。 1. demo 源码 楼主 clone 的 netty 的源码 阅读全文
posted @ 2018-05-19 23:44 莫那-鲁道 阅读(1481) 评论(0) 推荐(1) 编辑
摘要: 前言 在分布式系统中,常常需要使用缓存,而且通常是集群,访问缓存和添加缓存都需要一个 hash 算法来寻找到合适的 Cache 节点。但,通常不是用取余hash,而是使用我们今天的主角—— 一致性 hash 算法。 今天楼主就来说说这个一致性 hash 算法。 1. 为什么普通的 hash 算法不行 阅读全文
posted @ 2018-05-19 23:42 莫那-鲁道 阅读(1557) 评论(0) 推荐(1) 编辑