4

是否有提供压缩其组成对象的集合的 Java 第三方库?我用谷歌搜索了它,但结果是空白的。这样的构造对大型(读取多演出)地图或类似的东西有用吗?当然,访问和存储会降低性能,但是对于长期不经常访问的引用,这似乎是合理的,不是吗?

4

3 回答 3

3

这个用例本质上是内存数据库的用例,所以你应该研究一下。

如果要这样做,您可能必须基本上将任意 java 对象序列化为字节,然后将它们反射回类中。也可以使用内存数据库 - 无论如何我都看不到真正的区别,除了 java 对于这种事情可能有点高级。

请注意,这实际上在某种程度上是特定于 java 的——它可能是在 C 中你可以有一个库来获取内存并压缩它而无需做任何花哨的事情,但是由于 Java 无法访问内存,所以它使那种东西有点难……

于 2013-01-21T01:59:49.733 回答
2

MapDB 显然实现了 Java 集合样式映射并且可以执行“透明压缩”(参见http://www.mapdb.org/apidocs/org/mapdb/DBMaker.html#compressionEnable())。

我认为它是为磁盘存储或堆外存储设计的(请参阅http://www.mapdb.org/apidocs/org/mapdb/DBMaker.html#newDirectMemoryDB()),因此您可以在磁盘块之间进行选择或一块非垃圾收集的内存。

于 2013-01-21T02:32:34.380 回答
1

不太可能——这样的集合在大多数情况下并不是很有用

数据结构通常旨在为一组特定的使用模式提供高性能。添加压缩只会增加开销并减慢它们的主要用例。特别注意,最有效的压缩算法使用对先前看到的数据的反向引用。这通常与集合类所期望的随机访问模式不兼容(即不可能有效地实现),并且也与改变集合部分的能力不兼容。

当然,压缩非常适合顺序访问大块数据,以及处理我们需要在较慢的存储和主内存之间切换的非常大的数据量。但是我们已经有了用于文件系统和数据库的强大工具 :-)

于 2013-01-21T02:57:07.593 回答