手机上的算法优化 —— 内存压缩算法

【前言】

        随着手机APP的升级,手机的内存也越来越大,在有限的内存空间里存放更多的数据,成为了对developer的挑战,接下来我会介绍一下内存中最常使用的几种算法,并剖析一下适合的使用场景。

        由于鄙人知识浅薄,在这里仅分析ZRAM中使用的压缩算法,收集于大神,在这里做总结:

​
1. ZRAM是linux的一种内存优化技术,基本工作原理是:通过划定一片区域,
将压缩过后的硬盘数据放入该区域,以实现高速读取。

2.zram是把RAM划分一部分出来作为swap使用,zram是内存压缩,所有写入内
存的东西都会经过压缩,会少量增加CPU负担

3.swap是交换分区,类似于Windows的虚拟内存,就是当内存不足的时候,把
一部分硬盘空间虚拟成内存使用,从而解决内存容量不足的情况,swap是把
flash划分一部分出来作为swap使用。

4. 利用zRAM并不是减小Android的内存占用,而是通过zRAM来提供交换空间,
从而在内存紧张时释放出更多的可用内存,同时又避免传统的交换到文件系统的开销。

5. ZRAM SWAP

​

【压缩算法】

   查看手机目前收集中支持的ZRAM压缩算法:

cat sys/block/zram0/comp_algorithm                                                                                                                                                                                                                          
lzo [lzo-rle] lz4 zstd

压缩方案

  • Bzip2

bzip2是Julian Seward开发并按照自由软件/开源软件协议发布的数据压缩算法及程序。Seward在1996年7月第一次公开发布了bzip2 0.15版,在随后几年中这个压缩工具稳定性得到改善并且日渐流行,Seward在2000年晚些时候发布了1.0版。bzip2比传统的gzip的压缩效率更高,但是它的压缩速度较慢。

  • Deflater

DEFLATE是同时使用了LZ77算法与哈夫曼编码(Huffman Coding)的一个无损数据压缩算法,DEFLATE压缩与解压的源代码可以在自由、通用的压缩库zlib上找到,zlib官网:http://www.zlib.net/ jdk中对zlib压缩库提供了支持,压缩类Deflater和解压类Inflater,Deflater和Inflater都提供了native方法。

  • Gzip

gzip的实现算法还是deflate,只是在deflate格式上增加了文件头和文件尾,同样jdk也对gzip提供了支持,分别是GZIPOutputStream和GZIPInputStream类,同样可以发现GZIPOutputStream是继承于DeflaterOutputStream的,GZIPInputStream继承于InflaterInputStream,并且可以在源码中发现writeHeader和writeTrailer方法。

  • Lz4

LZ4是一种无损数据压缩算法,着重于压缩和解压缩速度。

  • Lzo

LZO是致力于解压速度的一种数据压缩算法,LZO是Lempel-Ziv-Oberhumer的缩写,这个算法是无损算法。

  • Snappy

Snappy(以前称Zippy)是Google基于LZ77的思路用C++语言编写的快速数据压缩与解压程序库,并在2011年开源。它的目标并非最大压缩率或与其他压缩程序库的兼容性,而是非常高的速度和合理的压缩率。

【压缩效率】

【压缩结论】

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值