Skip to content

Commit 1b0636b

Browse files
authored
Move default compression options into static variable in HttpContentCompressor (#16210)
Motivation: When `HttpContentCompressor` is created with the default constructor, it calls `defaultCompressionOptions()`, which allocates List and array on every new pipeline with `HttpContentCompressor` in it. Modification: Moved default compression options initialization into a static variable. Deprecated `private defaultCompressionOptions` method as it's used only in the deprecated constructor. Result: No more list and array allocation when `HttpContentCompressor` is created with default constructor.
1 parent 85a3a0e commit 1b0636b

1 file changed

Lines changed: 19 additions & 4 deletions

File tree

codec-http/src/main/java/io/netty/handler/codec/http/HttpContentCompressor.java

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,21 @@ public class HttpContentCompressor extends HttpContentEncoder {
6363
private ChannelHandlerContext ctx;
6464
private final Map<String, CompressionEncoderFactory> factories;
6565

66+
private static final CompressionOptions[] DEFAULT_COMPRESSION_OPTIONS;
67+
static {
68+
List<CompressionOptions> options = new ArrayList<>(5);
69+
options.add(StandardCompressionOptions.gzip());
70+
options.add(StandardCompressionOptions.deflate());
71+
options.add(StandardCompressionOptions.snappy());
72+
if (Brotli.isAvailable()) {
73+
options.add(StandardCompressionOptions.brotli());
74+
}
75+
if (Zstd.isAvailable()) {
76+
options.add(StandardCompressionOptions.zstd());
77+
}
78+
DEFAULT_COMPRESSION_OPTIONS = options.toArray(new CompressionOptions[0]);
79+
}
80+
6681
/**
6782
* Creates a new handler with {@link StandardCompressionOptions#brotli()} (if supported) ,
6883
* {@link StandardCompressionOptions#zstd()} (if supported), {@link StandardCompressionOptions#snappy()},
@@ -181,8 +196,7 @@ public HttpContentCompressor(int contentSizeThreshold, CompressionOptions... com
181196
ZstdOptions zstdOptions = null;
182197
SnappyOptions snappyOptions = null;
183198
if (compressionOptions == null || compressionOptions.length == 0) {
184-
compressionOptions = defaultCompressionOptions(
185-
StandardCompressionOptions.gzip(), StandardCompressionOptions.deflate());
199+
compressionOptions = DEFAULT_COMPRESSION_OPTIONS;
186200
}
187201

188202
ObjectUtil.deepCheckNotNull("compressionOptions", compressionOptions);
@@ -215,7 +229,7 @@ public HttpContentCompressor(int contentSizeThreshold, CompressionOptions... com
215229
this.zstdOptions = zstdOptions;
216230
this.snappyOptions = snappyOptions;
217231

218-
this.factories = new HashMap<String, CompressionEncoderFactory>();
232+
this.factories = new HashMap<>();
219233

220234
if (this.gzipOptions != null) {
221235
this.factories.put("gzip", new GzipEncoderFactory());
@@ -234,9 +248,10 @@ public HttpContentCompressor(int contentSizeThreshold, CompressionOptions... com
234248
}
235249
}
236250

251+
@Deprecated
237252
private static CompressionOptions[] defaultCompressionOptions(
238253
GzipOptions gzipOptions, DeflateOptions deflateOptions) {
239-
List<CompressionOptions> options = new ArrayList<CompressionOptions>(5);
254+
List<CompressionOptions> options = new ArrayList<>(5);
240255
options.add(gzipOptions);
241256
options.add(deflateOptions);
242257
options.add(StandardCompressionOptions.snappy());

0 commit comments

Comments
 (0)