diff --git a/src/main/java/com/seibel/lod/objects/SingleLevelContainer.java b/src/main/java/com/seibel/lod/objects/SingleLevelContainer.java index 390bb0fe9..c631b2515 100644 --- a/src/main/java/com/seibel/lod/objects/SingleLevelContainer.java +++ b/src/main/java/com/seibel/lod/objects/SingleLevelContainer.java @@ -137,7 +137,7 @@ public class SingleLevelContainer implements LevelContainer { int index = 0; int tempIndex; - byte[] tempData = new byte[1 + (size * size * 8)]; + byte[] tempData = ThreadMapUtil.getSaveContainer(1 + (size * size * 8)); tempData[index] = detailLevel; index++; for (int x = 0; x < size; x++) diff --git a/src/main/java/com/seibel/lod/objects/VerticalLevelContainer.java b/src/main/java/com/seibel/lod/objects/VerticalLevelContainer.java index 2457a76a7..edd759d3c 100644 --- a/src/main/java/com/seibel/lod/objects/VerticalLevelContainer.java +++ b/src/main/java/com/seibel/lod/objects/VerticalLevelContainer.java @@ -152,7 +152,7 @@ public class VerticalLevelContainer implements LevelContainer { int index = 0; int tempIndex; - byte[] tempData = new byte[2 + (size * size * maxVerticalData * 8)]; + byte[] tempData = ThreadMapUtil.getSaveContainer(2 + (size * size * maxVerticalData * 8)); tempData[index] = detailLevel; index++; tempData[index] = (byte) maxVerticalData; diff --git a/src/main/java/com/seibel/lod/util/ThreadMapUtil.java b/src/main/java/com/seibel/lod/util/ThreadMapUtil.java index 5273f814c..6c5ada9a4 100644 --- a/src/main/java/com/seibel/lod/util/ThreadMapUtil.java +++ b/src/main/java/com/seibel/lod/util/ThreadMapUtil.java @@ -19,7 +19,7 @@ public class ThreadMapUtil public static final ConcurrentMap threadAdjData = new ConcurrentHashMap<>(); - + public static final ConcurrentMap saveContainer = new ConcurrentHashMap<>(); public static final ConcurrentMap projectionShortMap = new ConcurrentHashMap<>(); public static final ConcurrentMap heightAndDepthMap = new ConcurrentHashMap<>(); public static final ConcurrentMap singleDataToMergeMap = new ConcurrentHashMap<>(); @@ -131,6 +131,14 @@ public class ThreadMapUtil return heightAndDepthMap.get(Thread.currentThread().getName()); } + public static byte[] getSaveContainer(int size){ + if(!saveContainer.containsKey(Thread.currentThread().getName()) || (saveContainer.get(Thread.currentThread().getName()) == null) || (saveContainer.get(Thread.currentThread().getName()).length != size)) + { + saveContainer.put(Thread.currentThread().getName(), new byte[size]); + } + return saveContainer.get(Thread.currentThread().getName()); + } + public static long[] getSingleAddDataToMerge(int size){ if(!singleDataToMergeMap.containsKey(Thread.currentThread().getName()) || (singleDataToMergeMap.get(Thread.currentThread().getName()) == null) || (singleDataToMergeMap.get(Thread.currentThread().getName()).length != size)) {