gpt4 book ai didi

java - 如何在不浪费内存的情况下在 JBoss-Netty 中使用无限帧大小?

转载 作者:搜寻专家 更新时间:2023-11-01 02:52:47 24 4
gpt4 key购买 nike

我探索 netty 在 VM 之间通信对象。我分别使用 ObjectEncoderObjectDecoder 来序列化它们。

我很快发现此解决方案仅限于最大 1MB 大小的对象。由于我打算传达更大的对象并且我不打算限制这个大小,所以我使用 Integer.MAX_VALUE 来设置最大帧长度。

不幸的是,它看起来像这个值被用来初始化一些缓冲区,因此导致不必要的 GC-ing 并且很可能在 OutOfMemory 中。

有没有一种方法可以在使用 DynamicChannelBuffers 的同时创建无限的 ObjectEncoder/Decoder,从而不会浪费太多内存?

最佳答案

ObjectDecoder 扩展了 LengthFieldBasedFrameDecoder,它扩展了 FrameDecoderFrameDecoder 管理解码缓冲区,它使用初始容量为 256 的动态缓冲区。

然而,一旦您接收到一个大对象,动态缓冲区会自行扩展,但绝不会收缩。如果您有多个交换大对象的连接,您的 ObjectDecoder 最终都会有一个非常大的缓冲区,可能会导致 OutOfMemoryError

该问题已于上周修复,本周将发布新版本 (3.2.7.Final)。

关于java - 如何在不浪费内存的情况下在 JBoss-Netty 中使用无限帧大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8065022/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com