在前面做项目的时候一直比较疑惑ByteBuf的创建是怎么一回事,因为比较忙也就胡乱的找了一个可以创建ByteBuf的方法进行使用了,今天在这里来总结一下吧。
首先,ByteBuf的类继承关系图,见附件netty类继承关系图。
从内存分配的角度看,ByteBuf可以分为两类:
(1)堆内存(HeapByteBuf)字节缓冲区:特点是内存的分配和回收速度快,可以被JVM自动回收;缺点就是如果进行socket的i/o读写需要额外做一次内存复制,将堆内存对应的缓冲区复制到内核Channel中,性能会有一定程度的下降。
(2)直接内存(DirectByteBuf)字节缓冲区:特点是非堆内存,它在堆外进行内存分配,相对于堆内存,它的分配和回收速度相对慢一些,但是将它写入或者从Socket Channel中读取时,会少一次内存复制,速度比堆内存快一些。
经验表明,ByteBuf的最佳实践是:在I/O通信线程中的读写缓冲区使用DirectByteBuf,后端业务消息的编解码模块使用HeapByteBuf的方式。
从内存回收角度看,ByteBuf也分为两类:基于对象池的ByteBuf和普通的ByteBuf。两者的主要区别在于基于对象池的ByteBuf可用重用ByteBuf对象,它自己维护了一个内存池,可以循环利用创建的ByteBuf,提升内存的使用效率,降低由于高负载导致的频繁GC。因此在高负载,大并发的情况下建议使用对象池ByteBuf。
相关推荐
### Netty学习笔记知识点概述 #### 一、Netty简介 Netty是一个广泛使用的高性能、异步事件驱动的网络应用程序框架,它简化了网络编程的复杂性,使得开发者能够更轻松地开发高性能、高可靠性的网络服务器和客户端。...
Netty学习笔记_Springboot实现自定义协议 本文主要介绍了使用Netty框架在Springboot项目中实现自定义协议的方法。自定义协议是指在网络通信中,使用特定的数据格式来传输数据,以满足特定的业务需求。在本文中,...
在Netty网络框架学习笔记-1中,可能详细介绍了NIO的基本概念,如选择器(Selector)、通道(Channel)和缓冲区(Buffer),以及它们如何协同工作以提高并发处理能力。 2. **Netty入门**:笔记-3和-5探讨了Netty的入门知识...
其中,Channel、EventLoop、ByteBuf 等关键类是理解 Netty 的基础,而 BossGroup、WorkerGroup 和 ChannelHandlerContext 等概念则有助于构建完整的网络通信模型。 二、Netty 学习笔记 学习笔记通常包含了作者在...
在 "boy-learning-netty-master" 这个压缩包中,很可能是包含了一个个人学习 Netty 的项目或笔记,包含了源码分析、实践示例等内容。通过阅读和研究这些材料,你将能够更深入地理解和运用 Netty,提升你的网络编程...
这个“learning-netty.zip”压缩包包含了一份Netty的学习笔记,重点在于代码学习和源码分析,基于Netty的4.1版本。下面将围绕Netty的核心概念、特性、以及如何通过学习笔记来深入理解Netty进行详细阐述。 1. **...
在本篇Netty4.0学习笔记中,我们将聚焦于如何在实际应用中混合使用`coder`和`handler`,这是Netty框架中非常关键的一部分,对于构建高性能、低延迟的网络应用程序至关重要。Netty是一个用Java编写的异步事件驱动的...
在本篇Netty4.0学习笔记系列之六中,我们将深入探讨Netty框架如何支持多种通讯协议,以及它在实现高效、灵活的网络通信中的关键特性。Netty是一个高性能、异步事件驱动的网络应用框架,适用于开发服务器和客户端的...
在本篇“Netty4.0学习笔记系列之五:自定义通讯协议”中,我们将深入探讨如何在Netty框架下构建和实现自己的通信协议。Netty是一个高性能、异步事件驱动的网络应用框架,广泛应用于Java领域的服务器开发,如网络游戏...
在本文中,我们将深入探讨Netty 4.0的学习笔记,特别是关于Server与Client之间的通信机制。 首先,我们要理解Netty的核心概念——NIO(非阻塞I/O)。Netty基于Java NIO库构建,它提供了更高级别的API,简化了多路...
这个“自动Netty笔记111”可能是某个开发者或学习者记录的一系列关于Netty学习过程中的关键点和理解。下面将详细阐述Netty的相关知识点。 1. **异步事件驱动模型**: Netty采用了非阻塞I/O模型,基于Java NIO(Non...
《基于Netty网络编程项目...通过阅读这份笔记,开发者不仅可以深入理解Netty的内部工作原理,还能学习到如何在项目中有效运用Netty,提升网络编程的效率和质量。无论是初学者还是经验丰富的开发者,都能从中受益匪浅。
7. **ByteBuf**: Netty提供的高效字节缓冲区,用于存储和读写数据,比Java的ByteBuffer更加强大和灵活。 8. **Future & Promise**: 用于异步编程,Future表示一个可能尚未完成的异步操作的结果,Promise则是Future...
这个“netty资料.rar”压缩包文件包含了关于Netty的学习笔记,可以帮助我们深入了解Netty的核心概念和使用技巧。 Netty 的主要特点包括: 1. **异步事件驱动**:Netty 使用了非阻塞I/O模型,基于Java NIO(非阻塞...
在 "netty-learning-master" 文件中,可能包含了作者学习 Netty 的笔记、示例代码和项目结构,这些都是很好的学习资源。通过阅读和实践这些内容,你将能够深入理解 Netty 的工作原理和最佳实践。
这个“Netty-learn”项目显然是一份关于Netty的学习笔记,记录了作者在探索Netty框架过程中的理解和实践。下面将详细阐述Netty的核心概念和重要特性,以及它在网络编程中的应用。 Netty 的主要特点: 1. **异步...
3. 文档:可能有Netty的使用教程或者笔记,解释了Netty的关键特性和最佳实践。 4. 测试用例:通过测试代码,你可以看到Netty如何处理各种异常情况,以及其性能测试,了解Netty的稳定性与效率。 深入学习Netty,你...
学习者将有机会学习如何利用Netty构建高效的RPC框架,如基于HTTP/2的RPC服务、基于gRPC的微服务通信,以及自定义协议的RPC实现。这些实战项目不仅涵盖了Netty的网络编程,还包括了协议解析、序列化与反序列化、服务...
通过源码剖析,学习者将了解Netty如何利用Java NIO库实现高效的I/O操作,包括Channel、EventLoop、Handler、ByteBuf等关键组件的工作原理,以及Pipeline的事件传播机制。此外,还会涉及Netty的线程模型,如BossGroup...
这个项目实战笔记主要涵盖了Netty的核心概念、设计模式以及如何在实际项目中运用Netty进行网络编程。 首先,Netty的核心概念包括通道(Channel)和处理器(Handler)。通道是Netty中的基本I/O抽象,它代表一个连接...