Netty源码分析之ByteBuf引用计数

Java41

引用计数是一种常用的内存管理机制,是指将资源的被引用次数保存起来,当被引用次数变为零时就将其释放的过程。Netty在4.x版本开始使用引用计数机制进行部分对象的管理,其实现思路并不是特别复杂,它主要涉及跟踪某个对象被引用的次数。在Netty具体代码中需要通过引用计数进行内存管理的对象,会基于ReferenceCounted接口实现,其中引用计数大于0时则代表该对象被引用不会释放,当引用计数减少到0时,该对象就会被释放。通过引用计数机制,Netty可以很好的实现内存管理,引用计数减少到0时要么直接释放内存,要么放回内存池中重复利用。

1、基本示例

下面先通过一个简单示例看下Netty中引用计数机制的使用

```
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) {

       ByteBuf recvBuffer = (ByteBuf) msg;// 申请ByteBuf 需要主动释放
    if(recvBuffer.isDirect()){
        System.err.println(true);
    }
    PooledByteBufAllocator allocator = new PooledByteBufAllocator(true);
    ByteBuf sendBuffer = allocator.buffer();//申请池化直接内存
    System.err.println("sendBuffer的引用计数:"+sendBuffer.refCnt());
    sendBuffer.retain();
    System.err.println("sendBuffer的引用计数:"+sendBuffer.refCnt());
    sendBuffer.release();
输入验证码查看隐藏内容

扫描二维码关注本站微信公众号 Johngo学长
或者在微信里搜索 Johngo学长
回复 svip 获取验证码
wechat Johngo学长

相关文章
Redis Java

Redis

启动服务以及停止 启动服务 ./redis-server redis.conf & ./redis-server start 启动redis服务 ./redis-server stop 停止r...
记一次k8s部署问题 Java

记一次k8s部署问题

问题描述 在k8s master节点按步骤创建成功后,执行从节点的加入操作,发现一直超时无法加入 问题日志 ```bash [root@node02 kubernetes-1.14]# kubeadm...
Discuz论坛 自动加好友留言程序 Java

Discuz论坛 自动加好友留言程序

这次不同,想要在论坛发消息首先是要登录的,所以必须要一个账号,接着是让爬虫登录,这是最重要的一个步骤,登录后获取Cookie存储,在加好友发消息的时候都要用到Cookie。 在开发过程中,遇到了不少难...
docker安装Kafka(windows版) Java

docker安装Kafka(windows版)

windows环境安装docker参考安装docker桌面版(Windows) 这一步如果出现报错的话可以直接输入wsl -l -v命令来查看当前Ubuntu的wsl版本 安装Kafka需要先安装 z...
java并发和排序的简单例子(Runnable+TreeSet) Java

java并发和排序的简单例子(Runnable+TreeSet)

很多时候,并发需要考虑线程安全,但在很多情况下,它与线程安全无关,因为并发最大的作用是并行性,而线程安全只是并发的一个子主题。[En]Many times concurrency needs to c...
期末代码 Java

期末代码

使用Java的输入输出流将一个文本文件的内容按行读出,每读出一行,就顺序添加行号,并写入到另一个文件中。 ```java import java.io.*; public class E { publ...
Java 15 新特性:隐藏类 Java

Java 15 新特性:隐藏类

什么是隐藏类 隐藏类是不能由其他类直接使用的类。引入隐藏类的主要目的是供框架使用,以便框架可以在运行时生成类,并通过反射间接使用它们。这可能有点抽象,不要紧,让我们用一个例子直观地理解它![En]A ...
docker进阶 Java

docker进阶

Docker Compose Docker DockerFile build run 手动操作,单个容器 微服务,100个微服务,依赖关系 Docker Compose来轻松高效的管理容器,定义运行多...
java 5种IO模型 Java

java 5种IO模型

人的痛苦会把自己折磨到多深呢? You cannot swim for new horizons until you have courage to lose sight of the shore. ...
从零玩转人脸识别之RGB人脸活体检测 Java

从零玩转人脸识别之RGB人脸活体检测

从零玩转RGB人脸活体检测 前言 本期教程人脸识别第三方平台为虹软科技,本文章讲解的是人脸识别RGB活体追踪技术,免费的功能很多可以自行搭配,希望在你看完本章课程有所收获。 ArcFace 离线SDK...