Skip to content

Commit 9de2a14

Browse files
MCRcortexishland
authored andcommitted
perf: avoid primitive boxing in gcFreeChunkSerializer
1 parent efa0915 commit 9de2a14

File tree

2 files changed

+29
-8
lines changed

2 files changed

+29
-8
lines changed

c2me-rewrites-chunk-serializer/src/main/java/com/ishland/c2me/rewrites/chunk_serializer/common/ChunkDataSerializer.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -248,8 +248,9 @@ private static void putShortListArray(ShortList[] data, NbtWriter writer, byte[]
248248
for (ShortList shortList : data) {
249249
if (shortList != null) {
250250
writer.startFixedListEntry(shortList.size(), NbtElement.SHORT_TYPE);
251-
for (Short short_ : shortList) {
252-
writer.putShortEntry(short_);
251+
var iter = shortList.iterator();
252+
while (iter.hasNext()) {
253+
writer.putShortEntry(iter.nextShort());
253254
}
254255
} else {
255256
writer.startFixedListEntry(0, NbtElement.SHORT_TYPE);
@@ -381,7 +382,7 @@ private static void writeBiomes(NbtWriter writer, ReadableContainer<RegistryEntr
381382
Optional<LongStream> storage = data.storage();
382383
//noinspection OptionalIsPresent
383384
if (storage.isPresent()) {
384-
writer.putLongArray(STRING_DATA, storage.get().toArray());
385+
writer.putLongArray(STRING_DATA, storage.get());
385386
}
386387
writer.finishCompound();
387388
}
@@ -450,8 +451,9 @@ public static NbtList toNbt(ShortList[] lists) {
450451
for (ShortList shortList : lists) {
451452
NbtList nbtList2 = new NbtList();
452453
if (shortList != null) {
453-
for (Short short_ : shortList) {
454-
nbtList2.add(NbtShort.of(short_));
454+
var iter = shortList.iterator();
455+
while (iter.hasNext()) {
456+
nbtList2.add(NbtShort.of((iter.nextShort())));
455457
}
456458
}
457459

c2me-rewrites-chunk-serializer/src/main/java/com/ishland/c2me/rewrites/chunk_serializer/common/NbtWriter.java

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import java.nio.charset.StandardCharsets;
1616
import java.util.Arrays;
1717
import java.util.List;
18+
import java.util.stream.LongStream;
1819

1920
@SuppressWarnings("WeakerAccess")
2021
public class NbtWriter {
@@ -106,10 +107,11 @@ private void insertLongArray(long[] value) {
106107
}
107108

108109
private void insertLongArray(LongIterable value) {
109-
value.forEach(i -> {
110-
UNSAFE.putLong(this.pointer, Long.reverseBytes(i));
110+
var iter = value.longIterator();
111+
while (iter.hasNext()) {
112+
UNSAFE.putLong(this.pointer, Long.reverseBytes(iter.nextLong()));
111113
this.pointer += 8;
112-
});
114+
}
113115
}
114116

115117
//region list entries
@@ -397,6 +399,23 @@ public void putLongArray(byte[] name, LongCollection value) {
397399
this.insertLongArray(value);
398400
}
399401

402+
public void putLongArray(byte[] name, LongStream value) {
403+
this.claimCapacity(1L + name.length + 4);
404+
this.insertByte(NbtElement.LONG_ARRAY_TYPE);
405+
this.insertByteArray(name);
406+
long offset = this.getOffset();
407+
this.insertInt(-1); //Holder
408+
int count = 0;
409+
var iter = value.iterator();
410+
while (iter.hasNext()) {
411+
this.claimCapacity(8);
412+
UNSAFE.putLong(this.pointer, Long.reverseBytes(iter.nextLong()));
413+
this.pointer += 8;
414+
count++;
415+
}
416+
UNSAFE.putInt(this.buffer + offset, Integer.reverseBytes(count));
417+
}
418+
400419

401420
@Deprecated
402421
public void putElement(String name, NbtElement data) {

0 commit comments

Comments
 (0)