如何在内存中安装大表?

时间:2016-04-17 02:58:02

标签: java performance

我有一个Java Map<String, List<String>>

有没有办法改进这一点,使其在不对性能产生太大影响的情况下使用更少的内存?

2 个答案:

答案 0 :(得分:2)

三个想法:

  • 编码字节数组可以提供比字符串更少的内存密集型表示,尤其是在字符串数据实际使用8位(或更少)字符集时。

  • 字符串列表可以表示为单个字符串,列表组件之间具有可分辨的字符串分隔符。

  • 字符串数据通常是可压缩的。

根据数据的性质,这些可以轻松地为列表减少2倍的空间。

缺点是您可能需要完全或部分重建原始List<String>对象,这将会影响性能。

您还应该考虑使用非内存驻留表示;例如传统数据库,NOSQL数据库或对象缓存&#34;框架。如果你需要做一个完整的&#34;那么堆积很大的JVM往往会导致性能问题。垃圾收集,或者与其他应用程序存在物理内存竞争。

答案 1 :(得分:0)

人们真的需要了解更多关于您的特定应用程序以明确推荐特定解决方案,但作为一个疯狂的猜测,如果它是一个非常非常大的表(例如数十万或数百万条记录),我建议您考虑使用数据库通过数据层访问抽象之一存储数据和访问,例如DataSet。 数据库已经过优化,可以在分摊的数据和时间范围内有效地存储,搜索和访问数据,因此,如果没有关于您的应用程序的更多信息,我会选择此选项。