Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java内存节省技术?_Java_Arrays_String_Memory - Fatal编程技术网

Java内存节省技术?

Java内存节省技术?,java,arrays,string,memory,Java,Arrays,String,Memory,我有这个4维数组来存储字符串值,这些字符串值用来创建一个地图,然后用paintComponent显示在屏幕上。我读过很多文章说使用大型阵列效率很低。(特别是因为数组维度是16x16x3x3)我想知道是否有任何方法可以以不同的方式存储字符串值(我将它们用作ID值)以节省内存或减少提取时间。如果您有任何想法或方法,我将不胜感激。谢谢 请记住,字符串值与数组是分开的。数组本身占用相同的内存空间,而不管它链接到什么字符串值。访问数组中的特定地址将花费相同的时间,无论您在其中保存的对象是什么类型,或者该对

我有这个4维数组来存储字符串值,这些字符串值用来创建一个地图,然后用paintComponent显示在屏幕上。我读过很多文章说使用大型阵列效率很低。(特别是因为数组维度是16x16x3x3)我想知道是否有任何方法可以以不同的方式存储字符串值(我将它们用作ID值)以节省内存或减少提取时间。如果您有任何想法或方法,我将不胜感激。谢谢

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

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

另见:

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


另外,一开始,四维数组可能不是满足您需求的最佳数据结构。您能描述一下为什么选择此数据结构来表示所要表示的内容吗?

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

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

另见:

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


另外,一开始,四维数组可能不是满足您需求的最佳数据结构。你能描述一下为什么选择这个数据结构来表示你想要表示的内容吗?

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

我要做的第一件事是不要使用字符串作为ID,而是使用int。它会大大缩小你的结构


而且,该阵列实际上并没有那么大,如果这是唯一的数据结构,我就不会担心效率问题。它只有2304个元素大。

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

我要做的第一件事是不要使用字符串作为ID,而是使用int。它会大大缩小你的结构


而且,该阵列实际上并没有那么大,如果这是唯一的数据结构,我就不会担心效率问题。只有2304个元素大。

字符串只占用每个数组元素中引用的空间。如果字符串来自一组非常小的值,则可以节省成本。一个更重要的问题是,你的四维数组是稀疏的还是大部分是填充的?如果实际指定的值很少,那么用从标记到字符串的映射替换4-d数组可能会节省大量成本。如果需要代码示例,请告诉我。

字符串只占用每个数组元素中引用的空间。如果字符串来自一组非常小的值,则可以节省成本。一个更重要的问题是,你的四维数组是稀疏的还是大部分是填充的?如果实际指定的值很少,那么用从标记到字符串的映射替换4-d数组可能会节省大量成本。如果您想要一个代码示例,请告诉我。

首先,16*16*3*3=2304-非常简单。在这个尺寸下,我更担心4D阵列可能造成的混乱,而不是它的尺寸

正如其他人所说,如果完全填充,那么数组就可以了。如果它有间隙,则最好使用ArrayList或类似的工具


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

首先,16*16*3*3=2304-非常简单。在这个尺寸下,我更担心4D阵列可能造成的混乱,而不是它的尺寸

正如其他人所说,如果完全填充,那么数组就可以了。如果它有间隙,则最好使用ArrayList或类似的工具


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

您实际上有一个16x16x3x3(即2k)字符串对象的4D数组吗?对我来说这听起来没那么重要。数组是存储数据的最有效方式