From 2107d3cbbdf59709103800ec04fcbc1a2768b9fc Mon Sep 17 00:00:00 2001 From: James Seibel Date: Sun, 10 Sep 2023 19:35:37 -0500 Subject: [PATCH] Optimize BlockState/Biome Wrapper getter methods The lambdas were being newly created for each get() which became difficult for the GC to handle. --- .../common/wrappers/block/BiomeWrapper.java | 16 +++++++++++++--- .../common/wrappers/block/BlockStateWrapper.java | 12 +++++++++++- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/BiomeWrapper.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/BiomeWrapper.java index 906882cd1..ff03efcab 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/BiomeWrapper.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/BiomeWrapper.java @@ -66,9 +66,9 @@ public class BiomeWrapper implements IBiomeWrapper private static final Logger LOGGER = LogManager.getLogger(); #if PRE_MC_1_18_2 - public static final ConcurrentMap biomeWrapperMap = new ConcurrentHashMap<>(); + public static final ConcurrentMap WRAPPER_BY_BIOME = new ConcurrentHashMap<>(); #else - public static final ConcurrentMap, BiomeWrapper> biomeWrapperMap = new ConcurrentHashMap<>(); + public static final ConcurrentMap, BiomeWrapper> WRAPPER_BY_BIOME = new ConcurrentHashMap<>(); #endif public static final String EMPTY_STRING = "EMPTY"; @@ -100,7 +100,17 @@ public class BiomeWrapper implements IBiomeWrapper return EMPTY_WRAPPER; } - return biomeWrapperMap.computeIfAbsent(biome, newBiome -> new BiomeWrapper(newBiome, levelWrapper)); + + if (WRAPPER_BY_BIOME.containsKey(biome)) + { + return WRAPPER_BY_BIOME.get(biome); + } + else + { + BiomeWrapper newWrapper = new BiomeWrapper(biome, levelWrapper); + WRAPPER_BY_BIOME.put(biome, newWrapper); + return newWrapper; + } } private BiomeWrapper(#if PRE_MC_1_18_2 Biome #else Holder #endif biome, ILevelWrapper levelWrapper) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/BlockStateWrapper.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/BlockStateWrapper.java index 8f69f8b2b..87fcfc854 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/BlockStateWrapper.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/BlockStateWrapper.java @@ -91,7 +91,17 @@ public class BlockStateWrapper implements IBlockStateWrapper return AIR; } - return WRAPPER_BY_BLOCK_STATE.computeIfAbsent(blockState, newBlockState -> new BlockStateWrapper(newBlockState, levelWrapper)); + + if (WRAPPER_BY_BLOCK_STATE.containsKey(blockState)) + { + return WRAPPER_BY_BLOCK_STATE.get(blockState); + } + else + { + BlockStateWrapper newWrapper = new BlockStateWrapper(blockState, levelWrapper); + WRAPPER_BY_BLOCK_STATE.put(blockState, newWrapper); + return newWrapper; + } } private BlockStateWrapper(BlockState blockState, ILevelWrapper levelWrapper)