Файл отображения памяти Chronicle Queue, чтобы уменьшить возможность сбора мусора? - PullRequest
1 голос
/ 10 марта 2019

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

}

1 Ответ

1 голос
/ 11 марта 2019

Вы можете повторно использовать объект, в который десериализуете.

// created once
MyObject result = new MyObject();

// this can be called multiple times with the same object
tailer.readDocument(result);

String также объединяет в пул, уменьшая количество мусора.

Таким образом, вы можете писать и читать миллионы сообщений, но только создаватьодин или два объекта.

...