Skip to content

LZMA

LZMA 常见于 xz/7z 生态,追求较高压缩率,代价是压缩速度和内存占用通常高于轻量算法。

核心思想

LZMA 使用大窗口字典匹配和范围编码,并通过上下文建模提升压缩率。

可以怎样理解它的内部流程

LZMA 的思路更偏“强模型”:

text
更深的匹配搜索 -> 更大的窗口 -> 更强的概率建模 -> 范围编码

这也是它常常能拿到较高压缩率,但压缩端更慢、内存更高的原因。

工程取舍

维度特点
压缩速度通常较慢
解压速度中等到较快
压缩率很高
内存可较高
流式liblzma 支持流式接口

常见工程特征

  • 经常出现在 xz / 7z 这类偏归档生态中。
  • 对窗口大小、字典大小、预设级别比较敏感。
  • 更适合“写一次、读多次,但写可以慢”的任务。

适用场景

  • 软件包发布
  • 长期归档
  • 对压缩率更敏感而非压缩速度的场景

调参时通常先看什么

  1. 预设级别:先决定压缩率与资源消耗的大致区间。
  2. 字典 / 窗口大小:越大通常越有利于长距离重复,但也更耗内存。
  3. 流式还是一次性 buffer API:取决于集成方式和数据规模。

使用时的常见坑

  • 在内存受限环境下直接使用高预设,容易让体验失控。
  • 把它用于极度延迟敏感路径,通常得不偿失。
  • 只看压缩率,不看压缩时间,容易在 CI、构建链路、离线任务里造成明显拖慢。

C++ 示例

查看 LZMA C++ 示例