摘要: 前言 在前文 "探秘 Java 热部署" 中,我们通过在死循环中重复加载 ClassLoader 和 Class 文件实现了热部署的功能,但我们也指出了缺点 不够灵活。需要手动修改文件等操作。 如果有那么一种功能,当你需要重新加载类并修改类的时候,有那么一个转换器自动帮你修改已有的 Class 文件 阅读全文
posted @ 2018-05-20 00:02 莫那-鲁道 阅读(4286) 评论(0) 推荐(1) 编辑
摘要: 前言 从前面的3篇文章中,我们分析了5个垃圾收集器,还有一些 GC 的算法,那么,在 GC 调优中,我们肯定会先判断哪里出现的问题,然后再根据出现的问题进行调优,而调优的手段就是 JVM 提供给我们的那些参数或者说选项,这些参数将会改变 GC 的运行方式。因此,他们显得极为重要。 我们将每一个垃圾收 阅读全文
posted @ 2018-05-20 00:01 莫那-鲁道 阅读(4202) 评论(0) 推荐(1) 编辑
摘要: 前言 在 JVM 综述里面,我们说,JVM 做了三件事情,Java 程序的内存管理, Java Class 二进制字节流的加载(ClassLoader),Java 程序的执行(执行引擎)。我们也说,我们大部分情况下只关注前2个。在前面的文章中,我们已经分析了内存关系相关的,包括运行时数据区,GC 相 阅读全文
posted @ 2018-05-20 00:01 莫那-鲁道 阅读(449) 评论(0) 推荐(0) 编辑
摘要: 前言 对于后端程序员,特别是 Java 程序员来讲,排查线上问题是不可避免的。各种 CPU 飚高,内存溢出,频繁 GC 等等,这些都是令人头疼的问题。楼主同样也遇到过这些问题,那么,遇到这些问题该如何解决呢? 首先,出现问题,肯定要先定位问题所在,然后分析问题原因,再然后解决问题,最后进行总结,防止 阅读全文
posted @ 2018-05-20 00:01 莫那-鲁道 阅读(2245) 评论(0) 推荐(5) 编辑
摘要: 前言 在 "深入浅出 JVM GC(2)" 中,我们介绍了一些 GC 算法,GC 名词,同时也留下了一个问题,就是每个 GC 收集器的具体作用。有哪些 GC 收集器呢? 1. Serial 串行收集器(只适用于堆内存 256M 以下的 JVM ) 2. ParNew 并行收集器(Serial 收集器 阅读全文
posted @ 2018-05-20 00:00 莫那-鲁道 阅读(634) 评论(0) 推荐(0) 编辑
摘要: 前言 在 "深入浅出 JVM GC(1)" 中,限于上篇文章的篇幅,我们留下了一个问题 : 如何回收? 这篇文章将重点讲述这个问题。 在上篇文章中,我们也列出了一些大纲,今天我们就按照那个大纲来逐个讲解。在此,我将大纲复制过来。 垃圾回收算法 1. 标记清除算法 2. 复制算法 3. 标记整理算法 阅读全文
posted @ 2018-05-19 23:59 莫那-鲁道 阅读(411) 评论(0) 推荐(0) 编辑
摘要: 前言 初级 Java 程序员步入中级程序员的有一个无法绕过的阶段 GC(Garbage Collection)。作为 Java 程序员,说实话,很幸福,不用像 C 程序员那样,时刻关心着内存,就像网上有句名言 生活从来都不容易,只不过是有人替你负重前行! 是的,GC 在替我们做这些脏活累活,GC 像 阅读全文
posted @ 2018-05-19 23:58 莫那-鲁道 阅读(421) 评论(0) 推荐(1) 编辑
摘要: 引自《深入理解Java 虚拟机》 前言 JVM 运行时数据分为几大部分 1. 程序计数器 2. Java 虚拟机栈 3. 本地方法栈 4. Java 堆 5. 方法区(永久代) 6. 运行时常量池 7. 直接内存 JVM 内存区域 Java 虚拟机在执行Java 程序的过程中会把它所管理的内存划分为 阅读全文
posted @ 2018-05-19 23:57 莫那-鲁道 阅读(519) 评论(0) 推荐(0) 编辑
摘要: 概览 从 JVM 的总体上看,它解决了3个问题: 1. Java 程序的内存管理(GC & 运行时数据区)。 2. Java Class 二进制字节流的加载(ClassLoader)。 3. Java 程序的执行(执行引擎)。 如下图所示: 在我们的日常开发中,最和我们息息相关的就是1和2了,比如 阅读全文
posted @ 2018-05-19 23:56 莫那-鲁道 阅读(476) 评论(0) 推荐(2) 编辑
摘要: 目录: 1. dubbo 的 Consumer 消费者如何使用 Netty 2. dubbo 的 Provider 提供者如何使用 Netty 3. 总结 前言 众所周知,国内知名框架 Dubbo 底层使用的是 Netty 作为网络通信,那么内部到底是如何使用的呢?今天我们就来一探究竟。 1. du 阅读全文
posted @ 2018-05-19 23:55 莫那-鲁道 阅读(12081) 评论(3) 推荐(4) 编辑
摘要: 前言 我们知道,Java 创建一个实例的消耗是不小的,如果没有使用栈上分配和 TLAB,那么就需要使用 CAS 在堆中创建对象。所以现在很多框架都使用对象池。Netty 也不例外,通过重用对象,能够避免频繁创建对象和销毁对象带来的损耗。 来看看具体实现。 1. Recycler 抽象类简介 该类 d 阅读全文
posted @ 2018-05-19 23:54 莫那-鲁道 阅读(1710) 评论(0) 推荐(1) 编辑
摘要: 前言:Netty 提供的心跳介绍 Netty 作为一个网络框架,提供了诸多功能,比如我们之前说的编解码,Netty 准备很多现成的编解码器,同时,Netty 还为我们准备了网络中,非常重要的一个服务 心跳机制。通过心跳检查对方是否有效,这在 RPC 框架中是必不可少的功能。 Netty 提供了 Id 阅读全文
posted @ 2018-05-19 23:54 莫那-鲁道 阅读(687) 评论(0) 推荐(0) 编辑
摘要: Netty 解码器抽象父类 ByteToMessageDecoder 源码解析 阅读全文
posted @ 2018-05-19 23:53 莫那-鲁道 阅读(809) 评论(0) 推荐(0) 编辑
摘要: 前言 在 "Netty 源码剖析之 unSafe.read 方法" 一文中,我们研究了 read 方法的实现,这是读取内容到容器,再看看 Netty 是如何将内容从容器输出 Channel 的吧。 1. ctx.writeAndFlush 方法 当我们调用此方法时,会从当前节点找上一个 outbou 阅读全文
posted @ 2018-05-19 23:51 莫那-鲁道 阅读(541) 评论(0) 推荐(0) 编辑
摘要: 目录: 1. NioSocketChannel$NioSocketChannelUnsafe 的 read 方法 2. 首先看 ByteBufAllocator 3. 再看 RecvByteBufAllocator.Handle 4. 两者如何配合进行内存分配 5. 如何读取到 ByteBuf 6. 阅读全文
posted @ 2018-05-19 23:50 莫那-鲁道 阅读(978) 评论(0) 推荐(0) 编辑
摘要: 目录: 前言 1. ChannelOutboundBuffer 介绍 2. addMessage 方法 3. addFlush 方法 4. flush0 方法 5. 缓冲区扩展思考 6. 总结 每个 ChannelSocket 的 Unsafe 都有一个绑定的 ChannelOutboundBuff 阅读全文
posted @ 2018-05-19 23:50 莫那-鲁道 阅读(6797) 评论(0) 推荐(2) 编辑
摘要: 前言 对于堆外内存,使用 System.gc() 是不靠谱的,依赖老年代 FGC 也是不靠谱的,而且大部分调优指南都设置了 DisableExplicitGC 禁用 System.gc()。所以主动回收比较靠谱, JDK 在 DirectByteBuffer 中提供了 Cleaner 用来主动释放内 阅读全文
posted @ 2018-05-19 23:49 莫那-鲁道 阅读(2584) 评论(0) 推荐(0) 编辑
摘要: 目录大纲: 1. 前言 2. 处理耗时业务的第一种方式 handler 种加入线程池 3. 处理耗时业务的第二种方式 Context 中添加线程池 4. 总结:两种方式的对比和思考 前言 熟悉 Netty 的同学都知道,不能在 Netty 中做耗时的,不可预料的操作,比如数据库,网络请求,这将会严重 阅读全文
posted @ 2018-05-19 23:48 莫那-鲁道 阅读(4753) 评论(0) 推荐(0) 编辑
摘要: 目录大纲: 0. 前言 1. ChannelPipeline | ChannelHandler | ChannelHandlerContext 三巨头介绍 2. 三巨头编织过程(创建过程) 3. ChannelPipeline 是如何调度 handler 的 4. 总结 前言 相信对 Netty 熟 阅读全文
posted @ 2018-05-19 23:47 莫那-鲁道 阅读(682) 评论(0) 推荐(0) 编辑
摘要: 目录大纲: 1. 前言 2. 针对 Netty 例子源码做了哪些修改? 3. 看 pipeline 是如何将数据送到自定义 handler 的 4. 看 pipeline 是如何将数据从自定义 handler 送出的 5. 总结 前言 在 "Netty 核心组件 Pipeline 源码分析(一)之剖 阅读全文
posted @ 2018-05-19 23:47 莫那-鲁道 阅读(594) 评论(0) 推荐(0) 编辑