Сбой JVM с использованием Chronicle Map
Когда я пытаюсь использовать Chronicle Map, у меня возникает ряд ошибок, которые мне не удалось устранить. В своей последней попытке отладки я прочитал поток в память, чтобы проверить, какие байты были, но он вылетает из строя всей JVM.
EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x000000005079c1b0, pid=7128, tid=10476
Я использую Kryo, чтобы записать свои данные и прочитать их обратно, используя BytesMarshaller<T>
для каждого типа, как это:
public void write(Bytes bytes, T obj)
{
ByteArrayOutputStream baos = null;
try (ByteArrayOutputStream baos2 = new ByteArrayOutputStream())
{
try (Output output = new Output(baos2))
{
kryos.get().writeObject(output, obj);
baos = baos2;
}
}
byte[] byteArray = baos.toByteArray();
OutputStream out = bytes.outputStream();
{
out.write(byteArray);
}
}
написать и это прочитать:
public T read(Bytes bytes)
{
ByteArrayOutputStream baos = null;
try (ByteArrayOutputStream baos2 = new ByteArrayOutputStream())
{
InputStream in = bytes.inputStream();
{
ByteStreams.copy(in, baos2);
baos = baos2;
}
}
try (Input input = new Input(baos.toByteArray()))
{
return kryos.get().readObject(input, cls);
}
}
Я пытался закрыть потоки, но получаю точно такую же проблему.
Эта проблема возникает, когда я начинаю перебирать набор ключей - не уверен, что это актуально.
Это моя трассировка стека:
j com.google.common.io.ByteStreams.copy(Ljava/io/InputStream;Ljava/io/OutputStream;)J+28
j uk.org.jaggard.dao.memory.KryoBytesMarchaller.read(Lnet/openhft/lang/io/Bytes;)Ljava/lang/Object;+28
j net.openhft.chronicle.hash.serialization.internal.BytesReaders$SimpleBytesReader.read(Lnet/openhft/lang/io/Bytes;J)Ljava/lang/Object;+5
j net.openhft.chronicle.map.VanillaChronicleMap$Segment.getEntry(Lnet/openhft/chronicle/map/VanillaChronicleMap$SegmentState;J)Ljava/util/Map$Entry;+70
j net.openhft.chronicle.map.VanillaChronicleMap$EntryIterator.next()Ljava/util/Map$Entry;+115
j net.openhft.chronicle.map.VanillaChronicleMap$EntryIterator.next()Ljava/lang/Object;+1
j java.util.AbstractMap$1$1.next()Ljava/lang/Object;+4