Chronicle 队列代理方法值每次都是相同的对象实例

Chronicle Queue Proxy Method Value is Same Object Instance Each Time

我正在使用 Chronicle V4 代理 API 将消息转换为函数调用。

readOne()调用后调用myMethod(Thing a)时,'a'对象实例ID每次都相同,但内容具有最新状态。

想象一下:

readOne();
readOne();

触发的方法:

myMethod(Thing a)
myMethod(Thing a)

第二次使用参数 'a' 的调用现在具有不同的状态,覆盖了 'a' 的任何先前缓存版本,例如内存中的哈希映射,因为 java 对象实例 ID 是 最初调用 myMethod 时相同

我希望这在我的设置中有些奇怪 - 很高兴知道这是设计使然还是只是我的问题。

这是为了提供对象的隐式回收而设计的。

如果您想要新对象,可以使用 Marshallable.deepCopy() 或使用 Marshallable.copyTo() 现有对象。除非您保留该对象,否则应该没有问题。例如,如果您将它写入另一个队列,它会立即写入而不是在后台写入。

它是以这种方式实现的,因此您可以处理数百万个事件并创建很少的对象。即每条消息少于 1 个字节的垃圾。

我强烈推荐使用最新版本的 Queue https://search.maven.org/search?q=g:net.openhft%20AND%20a:chronicle-queue 目前 v5.17.4