From b3a20fb938f3488b99ee0b4586592c75fc48c8f0 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Sun, 24 Mar 2024 12:17:48 -0500 Subject: [PATCH] Use native bindings for LZ4 output compression to reduce GC load --- .../util/objects/dataStreams/DhDataOutputStream.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/com/seibel/distanthorizons/core/util/objects/dataStreams/DhDataOutputStream.java b/core/src/main/java/com/seibel/distanthorizons/core/util/objects/dataStreams/DhDataOutputStream.java index aab1dbd0a..fe5665024 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/util/objects/dataStreams/DhDataOutputStream.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/util/objects/dataStreams/DhDataOutputStream.java @@ -22,7 +22,9 @@ package com.seibel.distanthorizons.core.util.objects.dataStreams; import com.github.luben.zstd.RecyclingBufferPool; import com.github.luben.zstd.ZstdOutputStream; import com.seibel.distanthorizons.api.enums.config.EDhApiDataCompressionMode; +import net.jpountz.lz4.LZ4Factory; import net.jpountz.lz4.LZ4FrameOutputStream; +import net.jpountz.xxhash.XXHashFactory; import org.tukaani.xz.LZMA2Options; import org.tukaani.xz.XZOutputStream; @@ -46,7 +48,12 @@ public class DhDataOutputStream extends DataOutputStream case UNCOMPRESSED: return stream; case LZ4: - return new LZ4FrameOutputStream(stream); + return new LZ4FrameOutputStream(stream, + LZ4FrameOutputStream.BLOCKSIZE.SIZE_64KB, -1L, + // using native instances reduces GC pressures + LZ4Factory.nativeInstance().fastCompressor(), + XXHashFactory.nativeInstance().hash32(), + LZ4FrameOutputStream.FLG.Bits.BLOCK_INDEPENDENCE); case Z_STD: return new ZstdOutputStream(stream, RecyclingBufferPool.INSTANCE); case LZMA2: