首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ByteBuffer回收类

ByteBuffer回收类
EN

Stack Overflow用户
提问于 2010-02-26 09:52:38
回答 3查看 2.3K关注 0票数 2

我想知道我如何编写一个ByteBuffer回收类,它可以让我获得一个至少与指定长度一样大的ByteBuffer,并且可以锁定正在使用的ByteBuffer对象,以防止它们被我的代码使用。这将防止一次又一次地重新构建DirectByteBuffers等,而不是使用现有的。有没有现成的Java库可以非常有效地做到这一点?我知道Javolution可以与对象回收一起工作,但是在这个上下文中,它是否扩展到了ByteBuffer类,并且满足了要求?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-02-26 15:23:48

首先,在你的使用模式上更加保守会更有意义。例如,有很多代码显示在每个OP_READ上分配新的ByteBuffer。这太疯狂了。每个连接最多只需要两个ByteBuffers,一个用于输入,一个用于输出,根据您正在做的事情,您可以只使用一个。在非常简单的情况下,例如回显服务器,您可以为整个应用程序使用一个BB。

我会调查这一点,而不是用另一层软件来掩盖裂缝。

票数 4
EN

Stack Overflow用户

发布于 2010-02-26 12:05:19

这只是建议,不是答案。如果您确实为DirectByteBuffer实现了一些缓存,那么一定要了解GC的含义,因为垃圾收集器不会跟踪DirectByteBuffer消耗的内存。

一些参考资料:

A thread - featuring Stack Overflow's tackline

A blog post on the same subject

And the followup

票数 3
EN

Stack Overflow用户

发布于 2010-05-23 11:02:54

通常,您将结合使用ThreadLocal和SoftReference包装器。前者用于简化同步(本质上消除了对同步的需求);后者用于在内存不足时使缓冲区可回收(请记住其他注释wrt )。直接缓冲区的GC问题)。这实际上很简单:检查SoftReference是否有足够大的缓冲区;如果没有,则分配;如果有,则清除引用。完成后,将reference重新设置为指向buffer。

另一个问题是,与常规的byte[]相比,是否需要ByteBuffer。许多开发人员假设ByteBuffers在性能方面更好,但这种假设通常不会得到实际数据的支持(即,测试是否存在性能差异,以及方向)。byte[]通常更快的原因是HotSpot访问它的代码可以更简单、更容易地高效地执行JIT。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2339016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档