相关疑难解决方法(0)

优化Java中一系列字符串的内存使用

我有大量的名称 - 值对(大约100k),我需要存储在某种缓存(比如一个哈希映射)中,其中值是一个平均大小约为30k字节的字符串.

现在我知道一个事实,即大量的值具有完全相同的字符串数据.为了避免必须多次分配相同的字符串数据,我想以某种方式重用先前分配的字符串,从而消耗更少的内存.此外,这需要相当快.即,逐个扫描所有先前分配的值不是一种选择.

关于如何解决这个问题的任何建议?

java string memory-management

9
推荐指数
2
解决办法
4339
查看次数

Java字符串实习的替代方案

由于Java的默认字符串实习已经有很多坏消息,我正在寻找替代方案.

你能建议一个API,它是Java字符串实习的一个很好的替代品吗?我的应用程序使用Java 6.我的要求主要是通过实习来避免重复的字符串.

关于坏消息:

  • 字符串实习生是通过本机方法实现的.并且C实现使用大约1k条目的固定大小,并且对于大量字符串而言非常差.
  • Java 6在Perm gen中存储实习字符串.因此不是GC'd并且可能导致烫发错误.我知道这在java 7中已修复,但我无法升级到java 7.

为什么我需要使用intering?

  • 我的应用程序是一个服务器应用程序,堆大小为10-20G,适用于不同的部署.
  • 在分析期间,我们已经发现数千个字符串的数据是重复的,我们可以通过避免存储重复的字符串来显着提高内存使用率.
  • 内存一直是我们的瓶颈,因此我们正在针对它而不是进行任何过早的优化.

java memory string string-interning

8
推荐指数
1
解决办法
1268
查看次数