首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java内存节约技术?

Java内存节约技术?
EN

Stack Overflow用户
提问于 2012-03-22 06:52:27
回答 5查看 1K关注 0票数 1

我读过很多文章说使用大型数组是非常低效的。(特别是因为数组的维数是16x16x3x3),我想知道是否有任何方法可以以不同的方式存储字符串值(我将它们用作ID值),以节省内存或减少读取时间。如果您有任何想法或方法,我将不胜感激。谢谢!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-03-22 06:58:28

好吧,如果你的矩阵是满的,也就是说每个元素都包含数据,那么我相信一个数组是最有效的。但是如果你的矩阵是稀疏的,你可以考虑使用更多基于链接的数据类型。

我要做的第一件事是不使用字符串作为I,而是使用整数。它会大大减小你的结构的尺寸。

而且,这个数组真的不是那么大,如果这是你唯一的数据结构,我不会担心效率。它只有2304个元素大。

票数 4
EN

Stack Overflow用户

发布于 2012-03-22 06:57:17

请记住,字符串值与数组是分开的。无论它链接到什么字符串值,数组本身都占用相同的内存空间。访问数组中的特定地址将花费相同的时间,而不管您在该数组中保存了什么类型的对象或该对象的值是什么。

但是,如果您发现许多字符串值表示完全相同的字符串,则可以通过利用String.intern()来避免同一字符串的多个副本。如果存储中间字符串,并且没有对非中间字符串的任何其他引用,则会释放非中间字符串以进行垃圾回收。然后,您的数组将有多个条目指向相同的内存空间,而不是具有等效字符串对象的不同内存地址。

另请参阅:

根据您的ID的要求,您可能还希望考虑使用不同于字符串的数据结构。例如,虽然数组本身的大小相同,但存储int值将避免为每个单独的条目分配额外空间。

而且,4维数组可能不是最适合您需求的数据结构。您能描述一下为什么选择这种数据结构来表示您想要表示的内容吗?

票数 2
EN

Stack Overflow用户

发布于 2012-03-22 07:02:43

首先,16*16*3*3 = 2304 -真的很谦虚。在这种大小下,我更担心4D数组可能造成的混乱,而不是它所占用的大小!

正如其他人所说,如果它完全填充,则数组是可以的。如果它有差距,ArrayList或类似的会更好。

如果字符串只是ID,为什么不存储枚举(甚至是整数)而不是字符串呢?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9814026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档