> This is another pull request to replace > https://github.com/openjdk/jdk/pull/10025 change which was blocked as not > acceptable (see > https://github.com/openjdk/jdk/pull/10025#pullrequestreview-1228216330) > > The objections to change #10025 were: > - specialized algorithm for given data complicates things, makes it hard to > learn, test and support > - algorithm is changed for DebugInfo, and the benefit is only for one type of > data > - statistics of the debug info data can (will) change, breaking the > optimization > > The suggestion was: > - don't change the core algorithm, but add one on top or underneath the > existing one, or reuse off-the-shelf zero-reduction schemes such as Cap'n > Proto > > With this change I propose a different approach. Instead of bit coding, the > sequence of zeros in a data stream is encoded with a special character that > normally never appears in Unsinged5 encoding, followed by a byte containing a > number of zeros. In this way the updated algorithm is a pure extension of the > existing encoding algorithm: data encoded without the zero-reduction trick is > unpacked in the same way as before. > > Currently there are several datasets affected by this change: Dependencies > info, OopMap info, LineNumber info, Debug info. Only Debug info has a large > number of zeros and gets a significant benefit. I experimented with the Cap'n > Proto and lz4 algorithms on DebugInfo. The Unsinged5 algorithm has a better > compression rate than these. > > DebugInfo data size is reduced by ~20% (actually, 10-30%, depending on the > application). Total nmethod size reduction is ~3%. > > Performance impact: Renaisance and DaCapo benchmarks do not show any > difference.
Boris Ulasevich has updated the pull request incrementally with one additional commit since the last revision: addressing review comments: super call, clarifying, and adding tests ------------- Changes: - all: https://git.openjdk.org/jdk/pull/12387/files - new: https://git.openjdk.org/jdk/pull/12387/files/0148f580..0632c968 Webrevs: - full: https://webrevs.openjdk.org/?repo=jdk&pr=12387&range=01 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=12387&range=00-01 Stats: 276 lines in 4 files changed: 274 ins; 0 del; 2 mod Patch: https://git.openjdk.org/jdk/pull/12387.diff Fetch: git fetch https://git.openjdk.org/jdk.git pull/12387/head:pull/12387 PR: https://git.openjdk.org/jdk/pull/12387
