java - 如何通过压缩 Java 中的对象来减少总内存占用?

标签 java performance design-patterns caching dictionary

我有一个大约有 20 列的表,其中大部分由 varchar 和小数组成。该表有近 150 万行。但它们中很少有共同之处,例如第 1 列仅包含 100 个不同的字符串,第 2 列有近 1000 个字符串,第 3 列有近 500 个字符串。

现在,我将所有这些列值存储在一个映射中,其中 Key 作为前 5 列,Data 作为其余列。我的任务是这样的,我需要在任务开始时初始化所有这些。

我应该使用什么模式(如享元等)或数据结构来最小化我的对象存储?

为什么我需要预加载所有数据?

假设整个表的数据是一棵树,受害者可以在任何叶子、树干或根部。因此,对于每个条目[这来自不同的地方],我需要查看树中是否有任何匹配项。

最佳答案

内化并不是最好的选择。可以从 PermSpace 收集垃圾,但虚拟机没有针对任何内容进行优化。

您可以实现自己的由共享 char[] 数组支持的 CharSequence 实现。

通过 CharSequence 实现,您将能够实现基本的共享语义,例如内部化字符串或更复杂的语义(考虑子字符串和其他投影)。

自定义 CharSequence 实现也可以进行优化,以比复制 char[] 的 String 类执行更少的内存分配(出于安全原因,如果您有支持 char[],则不需要这样做)在您的完全控制下)。甚至 new String("..").intern() 也会实例化一个新的 String 实例(char[] 数组),该实例会被快速垃圾回收。

关于java - 如何通过压缩 Java 中的对象来减少总内存占用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1832892/

相关文章:

java.lang.System.currentTimeMillis() 替换方法

java - 再次在字符串追加 vs concat vs +

swift - 将 Class.Type 传递给 Swift 函数

scala - 你如何在 scala 中编写模式匹配代码块?

java - JdbcRDD错误: connection established data fetched partially

java - .NET/Mono 还是 Java 是跨平台开发的更好选择?

java - TomCat 上的 JAX-RS 总是返回 404

python - Web2Py 中的每次调用都会解释代码吗?

c++ - 是否可以在 Visual Studio 2012 中配置性能 session 文件 (VSP) 的位置?

Javascript:构造函数中的回调