Skip to content

Commit 141eed5

Browse files
core: change Metadata internals to avoid garbage creation
Before: Benchmark (headerCount) Mode Cnt Score Error Units InboundHeadersBenchmark.defaultHeaders_clientHandler N/A avgt 10 240.879 ± 4.903 ns/op InboundHeadersBenchmark.defaultHeaders_serverHandler N/A avgt 10 882.354 ± 16.177 ns/op InboundHeadersBenchmark.grpcHeaders_clientHandler N/A avgt 10 208.068 ± 5.380 ns/op InboundHeadersBenchmark.grpcHeaders_serverHandler N/A avgt 10 477.604 ± 8.200 ns/op OutboundHeadersBenchmark.convertClientHeaders 1 sample 234233 125.232 ± 11.903 ns/op OutboundHeadersBenchmark.convertClientHeaders 5 sample 344367 264.343 ± 18.318 ns/op OutboundHeadersBenchmark.convertClientHeaders 10 sample 392273 439.640 ± 2.589 ns/op OutboundHeadersBenchmark.convertClientHeaders 20 sample 221506 855.115 ± 38.899 ns/op OutboundHeadersBenchmark.convertServerHeaders 1 sample 253676 111.941 ± 2.742 ns/op OutboundHeadersBenchmark.convertServerHeaders 5 sample 368499 248.255 ± 2.601 ns/op OutboundHeadersBenchmark.convertServerHeaders 10 sample 390015 439.651 ± 11.040 ns/op OutboundHeadersBenchmark.convertServerHeaders 20 sample 221807 840.435 ± 21.667 ns/op OutboundHeadersBenchmark.encodeClientHeaders 1 sample 230139 432.866 ± 25.503 ns/op OutboundHeadersBenchmark.encodeClientHeaders 5 sample 226901 765.095 ± 19.969 ns/op OutboundHeadersBenchmark.encodeClientHeaders 10 sample 260495 1268.239 ± 21.850 ns/op OutboundHeadersBenchmark.encodeClientHeaders 20 sample 311526 2059.973 ± 23.503 ns/op After: Benchmark (headerCount) Mode Cnt Score Error Units InboundHeadersBenchmark.defaultHeaders_clientHandler N/A avgt 10 104.317 ± 1.973 ns/op InboundHeadersBenchmark.defaultHeaders_serverHandler N/A avgt 10 395.666 ± 11.056 ns/op InboundHeadersBenchmark.grpcHeaders_clientHandler N/A avgt 10 64.147 ± 4.076 ns/op InboundHeadersBenchmark.grpcHeaders_serverHandler N/A avgt 10 228.299 ± 2.874 ns/op OutboundHeadersBenchmark.convertClientHeaders 1 sample 252451 102.718 ± 2.714 ns/op OutboundHeadersBenchmark.convertClientHeaders 5 sample 239976 225.812 ± 38.824 ns/op OutboundHeadersBenchmark.convertClientHeaders 10 sample 258119 364.475 ± 57.217 ns/op OutboundHeadersBenchmark.convertClientHeaders 20 sample 260138 676.950 ± 36.243 ns/op OutboundHeadersBenchmark.convertServerHeaders 1 sample 276064 105.371 ± 1.859 ns/op OutboundHeadersBenchmark.convertServerHeaders 5 sample 255128 190.970 ± 16.475 ns/op OutboundHeadersBenchmark.convertServerHeaders 10 sample 272923 366.769 ± 28.204 ns/op OutboundHeadersBenchmark.convertServerHeaders 20 sample 264797 641.961 ± 18.879 ns/op OutboundHeadersBenchmark.encodeClientHeaders 1 sample 226078 425.262 ± 3.481 ns/op OutboundHeadersBenchmark.encodeClientHeaders 5 sample 253606 675.488 ± 26.001 ns/op OutboundHeadersBenchmark.encodeClientHeaders 10 sample 286556 1157.014 ± 12.923 ns/op OutboundHeadersBenchmark.encodeClientHeaders 20 sample 345649 1874.806 ± 36.227 ns/op
1 parent 16c07ba commit 141eed5

File tree

8 files changed

+401
-325
lines changed

8 files changed

+401
-325
lines changed

core/src/main/java/io/grpc/InternalMetadata.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,10 +71,27 @@ public interface TrustedAsciiMarshaller<T> {
7171
/**
7272
* Copy of StandardCharsets, which is only available on Java 1.7 and above.
7373
*/
74+
@Internal
7475
public static final Charset US_ASCII = Charset.forName("US-ASCII");
7576

7677
@Internal
7778
public static <T> Key<T> keyOf(String name, TrustedAsciiMarshaller<T> marshaller) {
7879
return Metadata.Key.of(name, marshaller);
7980
}
81+
82+
83+
@Internal
84+
public static Metadata newMetadata(byte[]... binaryValues) {
85+
return new Metadata(binaryValues);
86+
}
87+
88+
@Internal
89+
public static Metadata newMetadata(int usedNames, byte[]... binaryValues) {
90+
return new Metadata(usedNames, binaryValues);
91+
}
92+
93+
@Internal
94+
public static byte[][] serialize(Metadata md) {
95+
return md.serialize();
96+
}
8097
}

0 commit comments

Comments
 (0)