4 ms·
> Why is 6 even used? The zlib default is 6. The "maximum compression" is 9. Most people would either use the default, or request maximum compression. > Why d
by cesarb 10y ago
> Why is 6 even used?
The zlib default is 6. The "maximum compression" is 9. Most people would either use the default, or request maximum compression.
> Why does almost nobody use zopfli which achieves 3–8% higher compression rates.
Most people are probably using Google's tools to create the APK, and these tools probably use zlib.
> Why aren't other compression formats supported like lzma, brotli, etc.?
Most compression formats with higher compression ratios (like lzma) need more power and memory to uncompress. As for brotli, not only IIRC it's newer than the APK format, but also most of its gains come from a predefined dictionary, which works only for text files.
Also, the APK format is AFAIK based on Java's JAR format, which uses Deflate exclusively. Many other recent formats also use a JAR-like container, like OpenDocument and EPUB.
- user5994461 10y agoI'd add that lzma memory usage is accounted in [multiple?] GB per core for the highest compression levels. That amount of memory is a big no-no for mobile devices.
- vanderZwan 10y agoIsn't it usually just the compression stage that's very demanding with these algorithms?
- user5994461 10y agoYes for the most common algorithms. The compression takes a lot more memory than the decompression. But... you still have to be careful with the decompression if you intend to support small devices. Be it a tiny embedded device (obvious issue) or an old generation $500 android phone where the JVM processes are limited to xx MB (less obvious issue).
- pja 10y agoThat’s for compression only isn’t it? I think lzma decompression requires a max of ~64Mb. (Checks manpage) Yup: Preset DictSize CompCPU CompMem DecMem -0 256 KiB 0 3 MiB 1 MiB -1 1 MiB 1 9 MiB 2 MiB -2 2 MiB 2 17 MiB 3 MiB -3 4 MiB 3 32 MiB 5 MiB -4 4 MiB 4 48 MiB 5 MiB -5 8 MiB 5 94 MiB 9 MiB -6 8 MiB 6 94 MiB 9 MiB -7 16 MiB 6 186 MiB 17 MiB -8 32 MiB 6 370 MiB 33 MiB -9 64 MiB 6 674 MiB 65 MiB Default of -6, so 8Mb. Doesn’t seem too unreasonable on a modern device.