![](https://img-blog.csdnimg.cn/20210616105952864.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Netty
文章平均质量分 96
Netty 源码
ClarenceZero
这个作者很懒,什么都没留下…
展开
-
Netty源码之jemalloc4内存分配(4.1.58)
Netty源码之jemalloc4内存分配(4.1.58)概述在讲 jemalloc4 算法之前,我们先回顾 jemalloc3 内存分配算法: Netty 使用一棵满二叉树管理不同规格的内存块,可将用户申请的内存大小划分四个级别,分别是 Tiny、Small、Normal 和 Huge,根据不同规格采取不同的分配策略。重新回顾 jemalloc3 内存规格图:在分配内存之前,需要对用户申请的大小进行规格化处理并得到规格值。对于 Normal 级别,它是 PageSize(默认值: 8192By原创 2021-02-03 15:25:50 · 1801 阅读 · 3 评论 -
Netty源码之SizeClasses(4.1.58)
Netty源码之SizeClasses(4.1.58)概述前面已对 Netty 使用 jemalloc3(jemalloc3、jemalloc4 指代 Netty 实现的 Java 版本,而非 C) 实现的内存分配的思路以及源码进行详解,接下来的这两篇是详解 Netty 基于 jemalloc4 重构内存分配的思想以及源码。jemalloc4 相较于 jemalloc3 最大的提升是进一步优化内存碎片问题,因为在 jemalloc3 中最多可能会导致 50% 内存碎片,但 jemalloc4 通过划分原创 2021-02-03 15:13:56 · 675 阅读 · 0 评论 -
Netty源码之对象池
Netty源码之对象池概述池化是我们提升性能的手段之一,比如线程池、内存池以及接下来讲的对象池。池化的作用目的是减少创建和销毁对象的开销,提高并发处理能力,而且利用池化也可以降低 GC 压力。Netty 设计了一个简易的对象池,在 Netty 内存使用广泛,比如对 PooledUnsafeDirectByteBuf 对象进行池化、比如对 io.netty.buffer.PoolThreadCache.MemoryRegionCache.Entry 对象(这个对象用于本地缓存封装内存块信息)进行池化。并不原创 2021-01-28 20:03:52 · 774 阅读 · 1 评论 -
Netty源码之内存管理(三)(4.1.44)
Netty源码之内存管理(三)(4.1.44)概述这是我们解读 Netty 内存管理的第三篇文章,前面两篇重点介绍了 ByteBuf 对象以及内存的分配和管理。比如利用分治思想创建多个 PoolArena 提供内存分配的能力、使用满二叉树数据结构管理内存的分配和回收等。但还有一个重要的东西我们没有讲,就是 jemalloc 从 tcmalloc 借鉴的本地线程缓存思想,这一篇就结合源码讲解 Netty 是如何利用本地线程缓存进一步提升 Netty 内存分配效率。内存分配入口回顾与池化内存分配的入口对原创 2021-01-28 18:10:46 · 480 阅读 · 0 评论 -
Netty源码之FastThreadLocalThread(4.1.44)
Netty源码之FastThreadLocalThread(4.1.44)概述我们都知道,Java 的 ThreadLocal 用在多线程环境下,提供一种访问某个变量的特殊方式,具体可看Java核心技术之ThreadLocal。由于 ThreadLocal 是在空间和时间之间寻求平衡,较好兼顾时间和性能。但是,Netty 通过理解 ThreadLocal 使用场景,觉得时间至上,最后利用空间换时间的思想重新设置了新的 FastThreadLocal,并配套实现了 FastThreadLocalThrea原创 2021-01-25 12:43:54 · 571 阅读 · 0 评论 -
Netty源码之内存管理(二)(4.1.44)
Netty源码之内存管理(二)(4.1.44)前面做了很多铺垫(Netty源码之内存管理(一)),带着大家熟悉了与内存分配相关的类的定义和分配逻辑。但并没有真正落实到 jemalloc 思想在源码是如何体现的。本章就是对 PoolChunk 逐字解析,死扣细节。在分析源码之前我们需要对分配的内存级别有一个清晰的定位,当分配 Huge 级别对象,直接使用 PoolChunk 包装,并没有复杂的分配逻辑。而对于 tiny&small&normal 级别来说,进行精细化的内存管理十分有必要的。原创 2021-01-22 19:51:25 · 533 阅读 · 0 评论 -
Netty源码之内存管理(一)(4.1.44 )
Netty源码之内存管理(一)(4.1.44 )Netty 作为一款高性能的网络应用程序框架,拥有自己的内存分配。其思想源于 jemalloc github ,可以说是 jemalloc 的 Java 版本。本章源码基于 Netty 4.1.44 版本,该版本是采用 jemalloc3.x 的算法思想,而 4.1.45 以后的版本则基于 jemalloc4.x 算法进行重构,两者差别还是挺大的。高性能内存分配jemalloc 是由 Jason Evans 在 FreeBSD 项目中引入的新一代内存原创 2021-01-21 20:27:20 · 1120 阅读 · 0 评论 -
Netty源码之ByteBuf(4.1.44)
Netty源码之ByteBuf(4.1.44)Netty 抛弃了 Java NIO 的 ByteBuffer,因为它功能有限且使用过于复杂。于是乎,Netty 自己弄出了一个类似 ByteBuffer 的数据容器,称之为 ByteBuf,并且提供很多非常酷的特性:容量可按需动态扩展。读写采用不同的指针,并随意切换,不需要用户额外调用 flip() 切换读写模式。通过内置的复合缓冲类型实现零拷贝技术。支持引用计数。支持缓存池。类型丰富,支持堆外内存和堆内内存。继承关系图图中所框选的是在原创 2021-01-20 12:05:35 · 525 阅读 · 0 评论