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

时间:2019-01-24 16:53:03

标签: chronicle chronicle-queue

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

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

想象:

readOne();
readOne();

触发的方法:

myMethod(Thing a)
myMethod(Thing a)

第二个参数为'a'且现在具有不同状态的调用将覆盖'a'的所有先前缓存版本,例如在内存中的哈希映射中,因为Java对象实例ID是相同的最初调用myMethod时。

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

1 个答案:

答案 0 :(得分:1)

这是设计使然,可以提供对象的隐式回收。

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

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

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