是否有Java第三方库提供了可以压缩其组成对象的集合?我尝试过谷歌搜索,但没有找到相关信息。这样的结构对于大型(多达几个G)地图等资源是否有用呢?虽然访问和存储会带来性能惩罚,但对于长期不经常访问的参考资料,这似乎是合理的,不是吗?
是否有Java第三方库提供了可以压缩其组成对象的集合?我尝试过谷歌搜索,但没有找到相关信息。这样的结构对于大型(多达几个G)地图等资源是否有用呢?虽然访问和存储会带来性能惩罚,但对于长期不经常访问的参考资料,这似乎是合理的,不是吗?
MapDB实现了Java集合风格的映射,并可以执行“透明压缩”(请参阅http://www.mapdb.org/apidocs/org/mapdb/DBMaker.html#compressionEnable())。
我认为它是为磁盘存储或堆外存储设计的(请参阅http://www.mapdb.org/apidocs/org/mapdb/DBMaker.html#newDirectMemoryDB()),因此您可以在磁盘块或非垃圾收集内存块之间进行选择。
不太可能 - 在大多数情况下,这样的集合并不是非常有用
数据结构通常被设计为针对一组特定的使用模式提供高性能。添加压缩只会增加开销,并减慢它们在主要用例中的速度。特别要注意的是,大多数高效的压缩算法使用回溯到先前看到的数据。这通常与集合类期望的随机访问模式不兼容(即无法高效实现),也与修改集合部分的能力不兼容。
当然,压缩对于顺序访问大块数据以及处理我们需要在较慢的存储和主内存之间移动的非常大的数据量非常有用。但是,我们已经有了称为文件系统和数据库的强大工具 :-)