- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
照书Netty in Action v10
, reference counting
用于处理 ByteBuf
的池化.但是 JVM 不知道 netty 引用计数,所以 JVM 仍然可以 GC ByteBuf
.如果是这样,为什么我们还需要关心引用计数并手动调用 release()
方法?
我引用了《Netty in Action v10》一书中的一些内容来添加一些上下文。
One of the tradeoffs of reference-counting is that the user have to be carefully when consume messages. While the JVM will still be able to GC such a message (as it is not aware of the reference-counting) this message will not be put back in the pool from which it may be obtained before. Thus chances are good that you will run out of resources at one point if you do not carefully release these messages.
ByteBuf
可以从2个方面进行分类:
1. Pooled or Unpooled
2. Heap-based or Direct
(a) Pooled Heap-based
(b) Pooled Direct
(c) Unpooled Heap-based
(d) Unpooled Direct
最佳答案
垃圾收集器间接释放直接缓冲区。我会让你通读这个问题的答案以了解这是如何发生的:Are Java DirectByteBuffer wrappers garbage collected?
当您执行 I/O 操作时,需要将堆缓冲区复制到直接内存中,然后再由内核处理。当您使用直接缓冲区时,您可以保存复制操作,这是使用直接缓冲区的主要优势。一个缺点是直接内存分配比从 Java 堆分配更昂贵,因此 Netty 引入了池化概念。
Java 中的池化对象是 polemic topic ,但 Netty 这样做的选择似乎得到了返回,Twitter article你引用的一些证据表明了这一点。对于分配缓冲区的特殊情况,当缓冲区的大小很大时,您可以看到它确实在直接缓冲区和堆缓冲区情况下都带来了好处。
现在对于池化,GC 在池化时不会回收缓冲区,因为在您使用缓冲区时,您的应用程序有一个或多个对它的引用;或者 Netty 的池有一个对它的引用,当它刚刚被分配并且还没有被提供给你的应用程序或者在你的应用程序使用它并把它还给池之后。
当您的应用程序在使用缓冲区并且没有进一步引用它之后不调用 release()
时,就会发生泄漏。 ,实际上是什么意思把它放回池中,如果你没有任何进一步的引用。在这种情况下,缓冲区最终将被垃圾收集,但 Netty 的池不会知道它。然后,池会相信您正在使用越来越多的缓冲区,而这些缓冲区永远不会返回到池中。这可能会产生内存泄漏,因为即使缓冲区本身被垃圾收集,用于存储池的内部数据结构也不会。
关于netty - 如果 JVM GC 仍然存在,为什么我们需要手动处理 Netty ByteBuf 的引用计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28647048/
每次我尝试构建(执行完整的 Clean,然后构建)时,我都会在 Eclipse 的问题部分下弹出此错误消息。项目本身旁边还显示一个错误。 我已经尝试了同一问题的其他解决方案中包含的所有内容: 删除项目
我收到以下错误(注意:我使用的是 Netbeans): java.sql.SQLException: No suitable driver found for jdbc:derby://localho
例如 //somewhere struct IFace; struct Base { Base(IFace* iface): f(iface) { //wi
我试图通过 stringstream 将 double 变成字符串,但它不起作用。 std::string MatlabPlotter::getTimeVector( unsigned int xve
我正在尝试使用 AudioKit 框架中的音序器播放音频文件。 AudioKit.output = sampler AudioKit.start() sampler.enableMID
昨天我问了一个关于插入 Heroku 的问题。它不工作,然后突然开始工作。我什么都没改变。现在在一个新的应用程序上,我遇到了完全相同的问题。我决定包含我的整个 Gemfile,希望我可以继续没有这种令
我知道,这个topic已经是discussed许多times,所以直截了当。 这是ItemsSource的TabControl: Tabs = new ObservableCollection {
我有一个更新对象的函数,问题是当我从更新表单字段返回到详细 View 时,它初始化旧对象而不是更新后的对象。 我想在 CarService 而不是 app.js 中填充汽车列表 这是我的汽车服务:
在 resolution comments错误报告 12266 (“套接字连接错误导致资源泄漏”),Robert Ehteshamzadeh 写道 TClientSocket is deprecate
我最初发布了一个问题 here 我发现 JTextField 仅在 JScrollPane 存在时才调整大小。换句话说,我可以根据需要最小化和最大化它,直到出现滚动条(因为文本太多,无法放入窗口)。之
我读过关于 postion:absolute 的问题并尝试了几乎所有可能的解决方案。包括相对定位 div,将它们包装在相对定位的父级中等等,但它没有帮助。 我正在绘制一个表格,然后我将 div 放入其
我在这里发起了一个话题document.getElementById not working但看起来即使提出的建议都是有效的,我仍然有问题。 我有几个复选框。当我在这里查看页面源代码时,有。 docu
我正在做一些阅读,试图更好地理解按位运算符,然后偶然发现了 a helpful old blog post from 2012 ,其中指出 - 在随机正整数 x 的奇数测试中 - 在作者的计算机上评估
我正在尝试在 Eclipse Neon 中使用 aspectj 创建一个示例 maven 项目。然而,方面并没有编织/工作(参见下面的输出)。我尝试寻找很多原因和解决方案,但没有一个有效(请参阅下面的
无论我如何配置我的 appsettings.json 和 appsettings.Development.json,除非我手动添加 ConfigureLogging,否则我无法在信息消息下方记录任何内
我正在尝试使用 JQuery .get() 方法和 JavaScript for 循环来处理来自外部文件的一些数据。我已经在 stackoverflow 上阅读了有关闭包和回调返回值的内容几个小时,但
我正在使用 PHP 5.6 并且要打印一些东西,我必须编辑 php.ini 并包含 php_printer.dll 文件。但是 PHP 5.6 没有.dll 文件。 我要解决的问题: 我想将凭证打印机
我目前正在调试一个包含内存泄漏的大(非常大!)C# 应用程序。它主要使用 Winforms 作为 GUI,尽管一些控件是在 WPF 中制作的,并由 ElementHost 托管。直到现在,我发现许多内
[已解决] 看来 PHP MYADMIN 变量成功了。我将 wait_timeout 设置为 30 ,并将 Lock_wait_timeout 设置为 50 花了将近 6 个小时才恢复稳定,包括几次重
我读过几个关于该主题的讨论,有人说 qmake < 3.0 不正确支持该指令。我刚刚为 g++-64 重新安装了 Qt 5.9.1,但问题仍然存在。此外,我尝试过各种 mkspecs/xxx/xxx.
我是一名优秀的程序员,十分优秀!