From e8338d826e841e8daff78b51d1a3c32d2b696847 Mon Sep 17 00:00:00 2001 From: Martin Dindoffer Date: Fri, 6 May 2022 23:45:45 +0200 Subject: [PATCH] Performance-related cleanup * Remove unnecessary bitwise and in WirePointer * Remove always true condition in Serialize * Pre-size segment ArrayList in Serialize * Remove unused local var in Serialize * Remove unnecessary bit shift in PackedOutputStream#write * Make fields final in BuilderArena and Serialize * Make Iterator classes static in DataList and TextList * Pre-size ArrayList in ReaderArena constructor --- runtime/src/main/java/org/capnproto/BuilderArena.java | 2 +- runtime/src/main/java/org/capnproto/DataList.java | 4 ++-- .../main/java/org/capnproto/PackedOutputStream.java | 2 +- runtime/src/main/java/org/capnproto/ReaderArena.java | 2 +- runtime/src/main/java/org/capnproto/Serialize.java | 10 +++------- runtime/src/main/java/org/capnproto/TextList.java | 4 ++-- runtime/src/main/java/org/capnproto/WirePointer.java | 2 +- 7 files changed, 11 insertions(+), 15 deletions(-) diff --git a/runtime/src/main/java/org/capnproto/BuilderArena.java b/runtime/src/main/java/org/capnproto/BuilderArena.java index 1ae46d0..290a6aa 100644 --- a/runtime/src/main/java/org/capnproto/BuilderArena.java +++ b/runtime/src/main/java/org/capnproto/BuilderArena.java @@ -37,7 +37,7 @@ public final class BuilderArena implements Arena { AllocationStrategy.GROW_HEURISTICALLY; public final ArrayList segments; - private Allocator allocator; + private final Allocator allocator; private final CapTableBuilder localCapTable = new CapTableBuilder() { diff --git a/runtime/src/main/java/org/capnproto/DataList.java b/runtime/src/main/java/org/capnproto/DataList.java index 423561c..ec4cc7f 100644 --- a/runtime/src/main/java/org/capnproto/DataList.java +++ b/runtime/src/main/java/org/capnproto/DataList.java @@ -54,7 +54,7 @@ public final class DataList { return _getPointerElement(Data.factory, index); } - public final class Iterator implements java.util.Iterator { + public static final class Iterator implements java.util.Iterator { public Reader list; public int idx = 0; public Iterator(Reader list) { @@ -99,7 +99,7 @@ public final class DataList { java.lang.Integer.MAX_VALUE); } - public final class Iterator implements java.util.Iterator { + public static final class Iterator implements java.util.Iterator { public Builder list; public int idx = 0; public Iterator(Builder list) { diff --git a/runtime/src/main/java/org/capnproto/PackedOutputStream.java b/runtime/src/main/java/org/capnproto/PackedOutputStream.java index 67fefe8..40a0f87 100644 --- a/runtime/src/main/java/org/capnproto/PackedOutputStream.java +++ b/runtime/src/main/java/org/capnproto/PackedOutputStream.java @@ -111,7 +111,7 @@ public final class PackedOutputStream implements WritableByteChannel { out.position(out.position() + bit7 - 1); inPtr += 1; - byte tag = (byte)((bit0 << 0) | (bit1 << 1) | (bit2 << 2) | (bit3 << 3) | + byte tag = (byte)((bit0) | (bit1 << 1) | (bit2 << 2) | (bit3 << 3) | (bit4 << 4) | (bit5 << 5) | (bit6 << 6) | (bit7 << 7)); out.put(tagPos, tag); diff --git a/runtime/src/main/java/org/capnproto/ReaderArena.java b/runtime/src/main/java/org/capnproto/ReaderArena.java index c499401..94972df 100644 --- a/runtime/src/main/java/org/capnproto/ReaderArena.java +++ b/runtime/src/main/java/org/capnproto/ReaderArena.java @@ -33,7 +33,7 @@ public final class ReaderArena implements Arena { public ReaderArena(ByteBuffer[] segmentSlices, long traversalLimitInWords) { this.limit = traversalLimitInWords; - this.segments = new ArrayList(); + this.segments = new ArrayList<>(segmentSlices.length); for(int ii = 0; ii < segmentSlices.length; ++ii) { this.segments.add(new SegmentReader(segmentSlices[ii], this)); } diff --git a/runtime/src/main/java/org/capnproto/Serialize.java b/runtime/src/main/java/org/capnproto/Serialize.java index 4329dfc..5b8ae75 100644 --- a/runtime/src/main/java/org/capnproto/Serialize.java +++ b/runtime/src/main/java/org/capnproto/Serialize.java @@ -43,7 +43,7 @@ public final class Serialize { return result; } - static int MAX_SEGMENT_WORDS = (1 << 28) - 1; + static final int MAX_SEGMENT_WORDS = (1 << 28) - 1; static ByteBuffer makeByteBufferForWords(int words) throws IOException { if (words > MAX_SEGMENT_WORDS) { @@ -79,10 +79,7 @@ public final class Serialize { int segmentCount = 1 + rawSegmentCount; - int segment0Size = 0; - if (segmentCount > 0) { - segment0Size = firstWord.getInt(4); - } + int segment0Size = firstWord.getInt(4); if (segment0Size < 0) { throw new DecodeException("segment 0 has more than 2^31 words, which is unsupported"); @@ -91,7 +88,7 @@ public final class Serialize { long totalWords = segment0Size; // in words - ArrayList moreSizes = new ArrayList(); + ArrayList moreSizes = new ArrayList<>(segmentCount -1); if (segmentCount > 1) { ByteBuffer moreSizesRaw = makeByteBuffer(4 * (segmentCount & ~1)); @@ -118,7 +115,6 @@ public final class Serialize { fillBuffer(segmentSlices[0], bc); segmentSlices[0].rewind(); - int offset = segment0Size; for (int ii = 1; ii < segmentCount; ++ii) { segmentSlices[ii] = makeByteBufferForWords(moreSizes.get(ii - 1)); fillBuffer(segmentSlices[ii], bc); diff --git a/runtime/src/main/java/org/capnproto/TextList.java b/runtime/src/main/java/org/capnproto/TextList.java index a56b382..f827bd7 100644 --- a/runtime/src/main/java/org/capnproto/TextList.java +++ b/runtime/src/main/java/org/capnproto/TextList.java @@ -54,7 +54,7 @@ public final class TextList { return _getPointerElement(Text.factory, index); } - public final class Iterator implements java.util.Iterator { + public static final class Iterator implements java.util.Iterator { public Reader list; public int idx = 0; public Iterator(Reader list) { @@ -99,7 +99,7 @@ public final class TextList { java.lang.Integer.MAX_VALUE); } - public final class Iterator implements java.util.Iterator { + public static final class Iterator implements java.util.Iterator { public Builder list; public int idx = 0; public Iterator(Builder list) { diff --git a/runtime/src/main/java/org/capnproto/WirePointer.java b/runtime/src/main/java/org/capnproto/WirePointer.java index 4d9b547..5e75c95 100644 --- a/runtime/src/main/java/org/capnproto/WirePointer.java +++ b/runtime/src/main/java/org/capnproto/WirePointer.java @@ -34,7 +34,7 @@ final class WirePointer { } public static int offsetAndKind(long wirePointer) { - return (int)(wirePointer & 0xffffffff); + return (int) wirePointer; } public static byte kind(long wirePointer) {