diff --git a/src/main/java/net/openhft/chronicle/hash/serialization/internal/CopyingMetaBytesInterop.java b/src/main/java/net/openhft/chronicle/hash/serialization/internal/CopyingMetaBytesInterop.java index fb2b27379..b33885967 100644 --- a/src/main/java/net/openhft/chronicle/hash/serialization/internal/CopyingMetaBytesInterop.java +++ b/src/main/java/net/openhft/chronicle/hash/serialization/internal/CopyingMetaBytesInterop.java @@ -20,14 +20,14 @@ package net.openhft.chronicle.hash.serialization.internal; import net.openhft.chronicle.hash.serialization.BytesWriter; import net.openhft.chronicle.hash.serialization.Hasher; -import net.openhft.lang.threadlocal.Provider; -import net.openhft.lang.threadlocal.StatefulCopyable; -import net.openhft.lang.threadlocal.ThreadLocalCopies; import net.openhft.lang.io.Bytes; import net.openhft.lang.io.DirectBytes; import net.openhft.lang.io.DirectStore; import net.openhft.lang.io.serialization.BytesMarshaller; -import net.openhft.lang.io.serialization.JDKObjectSerializer; +import net.openhft.lang.io.serialization.JDKZObjectSerializer; +import net.openhft.lang.threadlocal.Provider; +import net.openhft.lang.threadlocal.StatefulCopyable; +import net.openhft.lang.threadlocal.ThreadLocalCopies; import java.io.IOException; import java.io.ObjectInputStream; @@ -206,7 +206,7 @@ public abstract class CopyingMetaBytesInterop implements MetaBytesInterop< return buffer = store.bytes(); } } else { - buffer = new DirectStore(JDKObjectSerializer.INSTANCE, maxSize, false).bytes(); + buffer = new DirectStore(JDKZObjectSerializer.INSTANCE, maxSize, false).bytes(); return buffer; } } diff --git a/src/main/java/net/openhft/chronicle/map/AbstractChronicleMapBuilder.java b/src/main/java/net/openhft/chronicle/map/AbstractChronicleMapBuilder.java index 7307a8bb8..c8081859c 100755 --- a/src/main/java/net/openhft/chronicle/map/AbstractChronicleMapBuilder.java +++ b/src/main/java/net/openhft/chronicle/map/AbstractChronicleMapBuilder.java @@ -605,10 +605,9 @@ abstract class AbstractChronicleMapBuilder map = new ReplicatedChronicleMap, V, Object, MetaBytesWriter>(this, identifier); - BytesStore bytesStore = new DirectStore(JDKObjectSerializer.INSTANCE, + BytesStore bytesStore = new DirectStore(JDKZObjectSerializer.INSTANCE, map.sizeInBytes(), true); map.createMappedStoreAndSegments(bytesStore); return map; @@ -872,7 +871,7 @@ abstract class AbstractChronicleMapBuilder map = newMap(singleHashReplication, channel); - BytesStore bytesStore = new DirectStore(JDKObjectSerializer.INSTANCE, + BytesStore bytesStore = new DirectStore(JDKZObjectSerializer.INSTANCE, map.sizeInBytes(), true); map.createMappedStoreAndSegments(bytesStore); return establishReplication(map, singleHashReplication, channel); @@ -933,8 +932,8 @@ abstract class AbstractChronicleMapBuilder, long createMappedStoreAndSegments(File file) throws IOException { return createMappedStoreAndSegments(new MappedStore(file, FileChannel.MapMode.READ_WRITE, - sizeInBytes(), JDKObjectSerializer.INSTANCE)); + sizeInBytes(), JDKZObjectSerializer.INSTANCE)); } private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { diff --git a/src/test/java/net/openhft/chronicle/map/OSResizesMain.java b/src/test/java/net/openhft/chronicle/map/OSResizesMain.java index cc1af2ad4..7d3c986b5 100755 --- a/src/test/java/net/openhft/chronicle/map/OSResizesMain.java +++ b/src/test/java/net/openhft/chronicle/map/OSResizesMain.java @@ -20,10 +20,7 @@ package net.openhft.chronicle.map; import net.openhft.lang.Jvm; -import java.io.File; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.StringWriter; +import java.io.*; import java.util.Arrays; /** @@ -35,15 +32,21 @@ import java.util.Arrays; public class OSResizesMain { public static void main(String[] args) throws IOException, InterruptedException { File file = File.createTempFile("over-sized", "deleteme"); - ChronicleMap map = ChronicleMapBuilder.of(String.class, String.class) - .entrySize(100 * 1024 * 1024) - .entries(1000 * 1000) + int valueSize = 1000 * 1000; + ChronicleMap map = ChronicleMapBuilder.of(String.class, ByteArray.class) + .entrySize(50 * 1024 * 1024) + .valueSize(valueSize + 16) .createPersistedTo(file); - for (int i = 0; i < 10000; i++) { - char[] chars = new char[i]; - Arrays.fill(chars, '+'); - map.put("key-" + i, new String(chars)); + byte[] chars = new byte[valueSize]; + Arrays.fill(chars, (byte) '+'); + ByteArray ba = new ByteArray(chars); + for (int i = 0; i < 1000; i++) { + map.put("key-" + i, ba); } + long start = System.currentTimeMillis(); + System.gc(); + long time0 = System.currentTimeMillis() - start; + System.out.printf("GC time: %,d ms%n", time0); System.out.printf("System memory: %.1f GB, Extents of map: %.1f GB, disk used: %sB, addressRange: %s%n", Double.parseDouble(run("head", "-1", "/proc/meminfo").split("\\s+")[1]) / 1e6, file.length() / 1e9, @@ -51,7 +54,7 @@ public class OSResizesMain { run("grep", "over-sized", "/proc/" + Jvm.getProcessId() + "/maps").split("\\s")[0]); // show up in top. long time = System.currentTimeMillis(); - while (time + 20000 > System.currentTimeMillis()) + while (time + 30000 > System.currentTimeMillis()) Thread.yield(); map.close(); file.delete(); @@ -73,3 +76,11 @@ public class OSResizesMain { return sw.toString(); } } + +class ByteArray implements Serializable { + final byte[] bytes; + + ByteArray(byte[] bytes) { + this.bytes = bytes; + } +} \ No newline at end of file diff --git a/src/test/java/net/openhft/chronicle/map/RecursiveRefereneChMapTest.java b/src/test/java/net/openhft/chronicle/map/RecursiveRefereneChMapTest.java index 790b84265..4d50854ad 100644 --- a/src/test/java/net/openhft/chronicle/map/RecursiveRefereneChMapTest.java +++ b/src/test/java/net/openhft/chronicle/map/RecursiveRefereneChMapTest.java @@ -18,7 +18,7 @@ package net.openhft.chronicle.map; -import net.openhft.lang.io.serialization.JDKObjectSerializer; +import net.openhft.lang.io.serialization.JDKZObjectSerializer; import org.junit.Test; import java.io.*; @@ -35,7 +35,7 @@ public class RecursiveRefereneChMapTest { file.deleteOnExit(); Map map = ChronicleMapBuilder.of(String.class, StupidCycle.class) .entries(64) - .objectSerializer(JDKObjectSerializer.INSTANCE).create(); + .objectSerializer(JDKZObjectSerializer.INSTANCE).create(); map.put("Test", new StupidCycle()); map.put("Test2", new StupidCycle2()); StupidCycle cycle = (StupidCycle) map.get("Test"); diff --git a/src/test/java/net/openhft/chronicle/map/ReplicatedChronicleMapTest.java b/src/test/java/net/openhft/chronicle/map/ReplicatedChronicleMapTest.java index 382c299cc..68e7ef789 100644 --- a/src/test/java/net/openhft/chronicle/map/ReplicatedChronicleMapTest.java +++ b/src/test/java/net/openhft/chronicle/map/ReplicatedChronicleMapTest.java @@ -19,6 +19,7 @@ package net.openhft.chronicle.map; import net.openhft.chronicle.map.jrs166.JSR166TestCase; +import org.junit.Ignore; import org.junit.Test; import java.io.IOException; @@ -33,10 +34,8 @@ import static org.junit.Assert.*; * Other contributors include Andrew Wright, Jeffrey Hayes, * Pat Fisher, Mike Judd. Then modified by the Open HFT team. */ +@Ignore public class ReplicatedChronicleMapTest extends JSR166TestCase { - - - ChronicleMap newShmIntString() throws IOException { return ChronicleMapBuilder.of(Integer.class, CharSequence.class) .create();