ff0045e3e1
Motivation: Table based decoding is fast. Modification: Use table based decoding in HPACK decoder, inspired by https://github.com/python-hyper/hpack/blob/master/hpack/huffman_table.py This modifies the table to be based on integers, rather than 3-tuples of bytes. This is for two reasons: 1. It's faster 2. Using bytes makes the static intializer too big, and doesn't compile. Result: Faster Huffman decoding. This only seems to help the ascii case, the other decoding is about the same. Benchmarks: ``` Before: Benchmark (limitToAscii) (sensitive) (size) Mode Cnt Score Error Units HpackDecoderBenchmark.decode true true SMALL thrpt 20 426293.636 ± 1444.843 ops/s HpackDecoderBenchmark.decode true true MEDIUM thrpt 20 57843.738 ± 725.704 ops/s HpackDecoderBenchmark.decode true true LARGE thrpt 20 3002.412 ± 16.998 ops/s HpackDecoderBenchmark.decode true false SMALL thrpt 20 412339.400 ± 1128.394 ops/s HpackDecoderBenchmark.decode true false MEDIUM thrpt 20 58226.870 ± 199.591 ops/s HpackDecoderBenchmark.decode true false LARGE thrpt 20 3044.256 ± 10.675 ops/s HpackDecoderBenchmark.decode false true SMALL thrpt 20 2082615.030 ± 5929.726 ops/s HpackDecoderBenchmark.decode false true MEDIUM thrpt 10 571640.454 ± 26499.229 ops/s HpackDecoderBenchmark.decode false true LARGE thrpt 20 92714.555 ± 2292.222 ops/s HpackDecoderBenchmark.decode false false SMALL thrpt 20 1745872.421 ± 6788.840 ops/s HpackDecoderBenchmark.decode false false MEDIUM thrpt 20 490420.323 ± 2455.431 ops/s HpackDecoderBenchmark.decode false false LARGE thrpt 20 84536.200 ± 398.714 ops/s After(bytes): Benchmark (limitToAscii) (sensitive) (size) Mode Cnt Score Error Units HpackDecoderBenchmark.decode true true SMALL thrpt 20 472649.148 ± 7122.461 ops/s HpackDecoderBenchmark.decode true true MEDIUM thrpt 20 66739.638 ± 341.607 ops/s HpackDecoderBenchmark.decode true true LARGE thrpt 20 3139.773 ± 24.491 ops/s HpackDecoderBenchmark.decode true false SMALL thrpt 20 466933.833 ± 4514.971 ops/s HpackDecoderBenchmark.decode true false MEDIUM thrpt 20 66111.778 ± 568.326 ops/s HpackDecoderBenchmark.decode true false LARGE thrpt 20 3143.619 ± 3.332 ops/s HpackDecoderBenchmark.decode false true SMALL thrpt 20 2109995.177 ± 6203.143 ops/s HpackDecoderBenchmark.decode false true MEDIUM thrpt 20 586026.055 ± 1578.550 ops/s HpackDecoderBenchmark.decode false false SMALL thrpt 20 1775723.270 ± 4932.057 ops/s HpackDecoderBenchmark.decode false false MEDIUM thrpt 20 493316.467 ± 1453.037 ops/s HpackDecoderBenchmark.decode false false LARGE thrpt 10 85726.219 ± 402.573 ops/s After(ints): Benchmark (limitToAscii) (sensitive) (size) Mode Cnt Score Error Units HpackDecoderBenchmark.decode true true SMALL thrpt 20 615549.006 ± 5282.283 ops/s HpackDecoderBenchmark.decode true true MEDIUM thrpt 20 86714.630 ± 654.489 ops/s HpackDecoderBenchmark.decode true true LARGE thrpt 20 3984.439 ± 61.612 ops/s HpackDecoderBenchmark.decode true false SMALL thrpt 20 602489.337 ± 5397.024 ops/s HpackDecoderBenchmark.decode true false MEDIUM thrpt 20 88399.109 ± 241.115 ops/s HpackDecoderBenchmark.decode true false LARGE thrpt 20 3875.729 ± 103.057 ops/s HpackDecoderBenchmark.decode false true SMALL thrpt 20 2092165.454 ± 11918.859 ops/s HpackDecoderBenchmark.decode false true MEDIUM thrpt 20 583465.437 ± 5452.115 ops/s HpackDecoderBenchmark.decode false true LARGE thrpt 20 93290.061 ± 665.904 ops/s HpackDecoderBenchmark.decode false false SMALL thrpt 20 1758402.495 ± 14677.438 ops/s HpackDecoderBenchmark.decode false false MEDIUM thrpt 10 491598.099 ± 5029.698 ops/s HpackDecoderBenchmark.decode false false LARGE thrpt 20 85834.290 ± 554.915 ops/s ```
240 lines
7.9 KiB
Plaintext
240 lines
7.9 KiB
Plaintext
|
|
The Netty Project
|
|
=================
|
|
|
|
Please visit the Netty web site for more information:
|
|
|
|
* http://netty.io/
|
|
|
|
Copyright 2014 The Netty Project
|
|
|
|
The Netty Project licenses this file to you under the Apache License,
|
|
version 2.0 (the "License"); you may not use this file except in compliance
|
|
with the License. You may obtain a copy of the License at:
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
License for the specific language governing permissions and limitations
|
|
under the License.
|
|
|
|
Also, please refer to each LICENSE.<component>.txt file, which is located in
|
|
the 'license' directory of the distribution file, for the license terms of the
|
|
components that this product depends on.
|
|
|
|
-------------------------------------------------------------------------------
|
|
This product contains the extensions to Java Collections Framework which has
|
|
been derived from the works by JSR-166 EG, Doug Lea, and Jason T. Greene:
|
|
|
|
* LICENSE:
|
|
* license/LICENSE.jsr166y.txt (Public Domain)
|
|
* HOMEPAGE:
|
|
* http://gee.cs.oswego.edu/cgi-bin/viewcvs.cgi/jsr166/
|
|
* http://viewvc.jboss.org/cgi-bin/viewvc.cgi/jbosscache/experimental/jsr166/
|
|
|
|
This product contains a modified version of Robert Harder's Public Domain
|
|
Base64 Encoder and Decoder, which can be obtained at:
|
|
|
|
* LICENSE:
|
|
* license/LICENSE.base64.txt (Public Domain)
|
|
* HOMEPAGE:
|
|
* http://iharder.sourceforge.net/current/java/base64/
|
|
|
|
This product contains a modified portion of 'Webbit', an event based
|
|
WebSocket and HTTP server, which can be obtained at:
|
|
|
|
* LICENSE:
|
|
* license/LICENSE.webbit.txt (BSD License)
|
|
* HOMEPAGE:
|
|
* https://github.com/joewalnes/webbit
|
|
|
|
This product contains a modified portion of 'SLF4J', a simple logging
|
|
facade for Java, which can be obtained at:
|
|
|
|
* LICENSE:
|
|
* license/LICENSE.slf4j.txt (MIT License)
|
|
* HOMEPAGE:
|
|
* http://www.slf4j.org/
|
|
|
|
This product contains a modified portion of 'Apache Harmony', an open source
|
|
Java SE, which can be obtained at:
|
|
|
|
* NOTICE:
|
|
* license/NOTICE.harmony.txt
|
|
* LICENSE:
|
|
* license/LICENSE.harmony.txt (Apache License 2.0)
|
|
* HOMEPAGE:
|
|
* http://archive.apache.org/dist/harmony/
|
|
|
|
This product contains a modified portion of 'jbzip2', a Java bzip2 compression
|
|
and decompression library written by Matthew J. Francis. It can be obtained at:
|
|
|
|
* LICENSE:
|
|
* license/LICENSE.jbzip2.txt (MIT License)
|
|
* HOMEPAGE:
|
|
* https://code.google.com/p/jbzip2/
|
|
|
|
This product contains a modified portion of 'libdivsufsort', a C API library to construct
|
|
the suffix array and the Burrows-Wheeler transformed string for any input string of
|
|
a constant-size alphabet written by Yuta Mori. It can be obtained at:
|
|
|
|
* LICENSE:
|
|
* license/LICENSE.libdivsufsort.txt (MIT License)
|
|
* HOMEPAGE:
|
|
* https://github.com/y-256/libdivsufsort
|
|
|
|
This product contains a modified portion of Nitsan Wakart's 'JCTools', Java Concurrency Tools for the JVM,
|
|
which can be obtained at:
|
|
|
|
* LICENSE:
|
|
* license/LICENSE.jctools.txt (ASL2 License)
|
|
* HOMEPAGE:
|
|
* https://github.com/JCTools/JCTools
|
|
|
|
This product optionally depends on 'JZlib', a re-implementation of zlib in
|
|
pure Java, which can be obtained at:
|
|
|
|
* LICENSE:
|
|
* license/LICENSE.jzlib.txt (BSD style License)
|
|
* HOMEPAGE:
|
|
* http://www.jcraft.com/jzlib/
|
|
|
|
This product optionally depends on 'Compress-LZF', a Java library for encoding and
|
|
decoding data in LZF format, written by Tatu Saloranta. It can be obtained at:
|
|
|
|
* LICENSE:
|
|
* license/LICENSE.compress-lzf.txt (Apache License 2.0)
|
|
* HOMEPAGE:
|
|
* https://github.com/ning/compress
|
|
|
|
This product optionally depends on 'lz4', a LZ4 Java compression
|
|
and decompression library written by Adrien Grand. It can be obtained at:
|
|
|
|
* LICENSE:
|
|
* license/LICENSE.lz4.txt (Apache License 2.0)
|
|
* HOMEPAGE:
|
|
* https://github.com/jpountz/lz4-java
|
|
|
|
This product optionally depends on 'lzma-java', a LZMA Java compression
|
|
and decompression library, which can be obtained at:
|
|
|
|
* LICENSE:
|
|
* license/LICENSE.lzma-java.txt (Apache License 2.0)
|
|
* HOMEPAGE:
|
|
* https://github.com/jponge/lzma-java
|
|
|
|
This product contains a modified portion of 'jfastlz', a Java port of FastLZ compression
|
|
and decompression library written by William Kinney. It can be obtained at:
|
|
|
|
* LICENSE:
|
|
* license/LICENSE.jfastlz.txt (MIT License)
|
|
* HOMEPAGE:
|
|
* https://code.google.com/p/jfastlz/
|
|
|
|
This product contains a modified portion of and optionally depends on 'Protocol Buffers', Google's data
|
|
interchange format, which can be obtained at:
|
|
|
|
* LICENSE:
|
|
* license/LICENSE.protobuf.txt (New BSD License)
|
|
* HOMEPAGE:
|
|
* https://github.com/google/protobuf
|
|
|
|
This product optionally depends on 'Bouncy Castle Crypto APIs' to generate
|
|
a temporary self-signed X.509 certificate when the JVM does not provide the
|
|
equivalent functionality. It can be obtained at:
|
|
|
|
* LICENSE:
|
|
* license/LICENSE.bouncycastle.txt (MIT License)
|
|
* HOMEPAGE:
|
|
* http://www.bouncycastle.org/
|
|
|
|
This product optionally depends on 'Snappy', a compression library produced
|
|
by Google Inc, which can be obtained at:
|
|
|
|
* LICENSE:
|
|
* license/LICENSE.snappy.txt (New BSD License)
|
|
* HOMEPAGE:
|
|
* https://github.com/google/snappy
|
|
|
|
This product optionally depends on 'JBoss Marshalling', an alternative Java
|
|
serialization API, which can be obtained at:
|
|
|
|
* LICENSE:
|
|
* license/LICENSE.jboss-marshalling.txt (Apache License 2.0)
|
|
* HOMEPAGE:
|
|
* https://github.com/jboss-remoting/jboss-marshalling
|
|
|
|
This product optionally depends on 'Caliper', Google's micro-
|
|
benchmarking framework, which can be obtained at:
|
|
|
|
* LICENSE:
|
|
* license/LICENSE.caliper.txt (Apache License 2.0)
|
|
* HOMEPAGE:
|
|
* https://github.com/google/caliper
|
|
|
|
This product optionally depends on 'Apache Commons Logging', a logging
|
|
framework, which can be obtained at:
|
|
|
|
* LICENSE:
|
|
* license/LICENSE.commons-logging.txt (Apache License 2.0)
|
|
* HOMEPAGE:
|
|
* http://commons.apache.org/logging/
|
|
|
|
This product optionally depends on 'Apache Log4J', a logging framework, which
|
|
can be obtained at:
|
|
|
|
* LICENSE:
|
|
* license/LICENSE.log4j.txt (Apache License 2.0)
|
|
* HOMEPAGE:
|
|
* http://logging.apache.org/log4j/
|
|
|
|
This product optionally depends on 'Aalto XML', an ultra-high performance
|
|
non-blocking XML processor, which can be obtained at:
|
|
|
|
* LICENSE:
|
|
* license/LICENSE.aalto-xml.txt (Apache License 2.0)
|
|
* HOMEPAGE:
|
|
* http://wiki.fasterxml.com/AaltoHome
|
|
|
|
This product contains a modified version of 'HPACK', a Java implementation of
|
|
the HTTP/2 HPACK algorithm written by Twitter. It can be obtained at:
|
|
|
|
* LICENSE:
|
|
* license/LICENSE.hpack.txt (Apache License 2.0)
|
|
* HOMEPAGE:
|
|
* https://github.com/twitter/hpack
|
|
|
|
This product contains a modified version of 'HPACK', a Java implementation of
|
|
the HTTP/2 HPACK algorithm written by Cory Benfield. It can be obtained at:
|
|
|
|
* LICENSE:
|
|
* license/LICENSE.hyper-hpack.txt (MIT License)
|
|
* HOMEPAGE:
|
|
* https://github.com/python-hyper/hpack/
|
|
|
|
This product contains a modified version of 'HPACK', a Java implementation of
|
|
the HTTP/2 HPACK algorithm written by Tatsuhiro Tsujikawa. It can be obtained at:
|
|
|
|
* LICENSE:
|
|
* license/LICENSE.nghttp2-hpack.txt (MIT License)
|
|
* HOMEPAGE:
|
|
* https://github.com/nghttp2/nghttp2/
|
|
|
|
This product contains a modified portion of 'Apache Commons Lang', a Java library
|
|
provides utilities for the java.lang API, which can be obtained at:
|
|
|
|
* LICENSE:
|
|
* license/LICENSE.commons-lang.txt (Apache License 2.0)
|
|
* HOMEPAGE:
|
|
* https://commons.apache.org/proper/commons-lang/
|
|
|
|
|
|
This product contains the Maven wrapper scripts from 'Maven Wrapper', that provides an easy way to ensure a user has everything necessary to run the Maven build.
|
|
|
|
* LICENSE:
|
|
* license/LICENSE.mvn-wrapper.txt (Apache License 2.0)
|
|
* HOMEPAGE:
|
|
* https://github.com/takari/maven-wrapper
|