我正在使用Chronicle V4代理API将消息转换为函数调用。
在myMethod(Thing a)
调用后调用readOne()
时,'a'
对象实例ID每次都相同,但是内容具有最新状态。
想象:
readOne();
readOne();
触发的方法:
myMethod(Thing a)
myMethod(Thing a)
第二个参数为'a'
且现在具有不同状态的调用将覆盖'a'
的所有先前缓存版本,例如在内存中的哈希映射中,因为Java对象实例ID是相同的最初调用myMethod时。
我希望这对我的设置有些奇怪-很高兴知道这是设计使然还是我的问题。
答案 0 :(得分:1)
这是设计使然,可以提供对象的隐式回收。
如果您想要一个新对象,则可以使用Marshallable.deepCopy()
或使用Marshallable.copyTo()
一个现有的对象。除非您保留该对象,否则应该不会有问题。例如,如果将其写到另一个队列中,则会立即写入而不是在后台写入。
以这种方式实现,因此您可以处理数百万个事件并创建很少的对象。即每封邮件少于1个字节的垃圾。
我强烈建议使用当前最新版本的Queue https://search.maven.org/search?q=g:net.openhft%20AND%20a:chronicle-queue v5.17.4