У меня вопрос о том, как очередь 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);
}
}