In data compression, BCJ, short for branch/call/jump, refers to a technique that improves the compression of machine code by replacing relative branch addresses with absolute ones. This allows a Lempel–Ziv compressor to identify duplicate targets and more efficiently encode them. On decompression, the inverse filter restores the original encoding. Different BCJ filters are used for different instruction sets, as each use different opcodes for branching.

A form of BCJ is seen in Microsoft's cabinet file format from 1996, which filters x86 CALL instructions for the LZX compressor.[1] The 7z and xz file formats implement BCJ for multiple architectures.[2][3] ZPAQ calls its x86 BCJ as "E8E9", after the opcode values.[4]

bsdiff, a tool for delta updates, circumvents the need of writing architecture-specific BCJ tools by encoding bytewise differences. This allows it to be much better than the "match and copy" type tools such as VCDIFF,[5] giving an output size of only 6% for Google Chrome. However, Google's courgette, which adds a layer of explicit disassembly, is able to produce 9× smaller diffs.[6]

Effect

edit

For a squashfs image of a Fedora Linux 31 live image, using x86 BCJ saves an extra 30 MB out of the ~1.7 GB compressed size, but doubles the installation time.[7] (An x86 BCJ filter is more complicated than the BCJ filters for other (especially RISC) architectures due to the variable length of instructions. With fixed-length instructions, a BCJ filter can be made parallel.)

References

edit
  1. ^ "cabextract: Free Software for extracting Microsoft cabinet files". Retrieved 17 March 2020.
  2. ^ "7z Format". www.7-zip.org.
  3. ^ "The .xz File Format".
  4. ^ "ZPAQ". mattmahoney.net.
  5. ^ Colin Percival, Naive differences of executable code, http://www.daemonology.net/bsdiff/, 2003.
  6. ^ "Software Updates: Courgette". www.chromium.org.
  7. ^ "Changes/OptimizeSquashFS - Fedora Project Wiki". fedoraproject.org.

📚 Artikel Terkait di Wikipedia

BCJ

BCJ may refer to Bachelor of Communication and Journalism Bachelor of Criminal Justice Bach Collegium Japan Bohlin Cywinski Jackson BCJ (algorithm), a

LZMA

simple delta encoding (for images) and BCJ for executable code. It also provides some other compression algorithms used in 7z. Decompression-only code for

7z

size of existing gzip, ZIP, PNG, or MNG files. The LZMA SDK comes with the BCJ and BCJ2 preprocessors included, so that later stages are able to achieve

XZ Utils

stream. The xz format improves on lzma by allowing for preprocessing filters (BCJ and delta). The exact filters used are similar to those used in 7z, as 7z's

LZX

80x86 binary code. (This technique is later generalized as Branch-Call-Jump [BCJ] filtering.) When Microsoft introduced Microsoft Compressed HTML Help, the

FreeArc

replacements for text), DELTA (improves compression of tables in binary data), BCJ (executables preproccesor) and LZP (removes repetitions in text). In 2010

ZPAQ

compression as a speed optimization. ZPAQ will use an E8E9 transform (see: BCJ) to improve the compression of x86 code typically found in .exe and .dll

Critical band

London, UK: Whurr Publishers. ISBN 978-0-585-12256-4. OCLC 44964119. Moore, B.C.J. (1986). "Parallels between frequency selectivity measured psychophysically