我有一个关于 Chronicle 队列如何避免垃圾收集的问题:
我了解 Chronicle 队列使用内存映射文件,以便它可以将对象保存到主内存或 dist 而不是 JVM。但是,当处理器从主内存中反序列化对象时,它仍然需要创建一个新实例。那么 Chronicle 队列究竟在哪里避免垃圾收集呢?
请参阅来自 Chronicle github 示例的以下案例。在执行写入/读取操作时,仍然需要使用 MyObject me = new MyObject() 创建一个新实例,“me”将被垃圾回收。
public class Example {
static class MyObject implements Marshallable {
String name;
int age;
@Override
public String toString() {
return Marshallable.$toString(this);
}
}
public static void main(String[] args) throws IOException {
// will write the .cq4 file to working directory
SingleChronicleQueue queue = SingleChronicleQueueBuilder.builder().path(Files
.createTempDirectory("queue").toFile()).build();
ExcerptAppender appender = queue.acquireAppender();
ExcerptTailer tailer = queue.createTailer();
MyObject me = new MyObject();
me.name = "rob";
me.age = 40;
// write 'MyObject' to the queue
appender.writeDocument(me);
// read 'MyObject' from the queue
MyObject result = new MyObject();
tailer.readDocument(result);
System.out.println(result);
}
}