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
我正在使用 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