【发布时间】:2012-01-19 12:05:53
【问题描述】:
大家好,在编写数组列表实现时,我了解在删除 Item(x) 时将其设置为 null(而不是简单地 quantity -= 1)以防止内存泄漏非常重要。
但是,如果我的数组列表是原始 int 数组列表(由 int[] 支持),将其设置为 0 是否有意义?
类似地,对于原始字符的数组列表(由 char[] 支持),当调用 RemoveRange() 时,用 \u0000 填充该范围是否有意义?还是只更新length 和指针而不修改后备数组完全没问题?
填充零的整数数组可能比填充整数值的等长数组占用的内存更少,因为运行时可以进行优化?
【问题讨论】:
-
如果我没记错的话,这个答案有点不合逻辑。我会让更聪明的人来解释,因为我对这个问题的记忆太模糊了。
-
很容易错误地确认 int[] 越大,持有的数字越大。有些人根本不知道计算机的工作原理吗?
-
@Ingo 我在想如果它们都是相同的值(即 0)可以进行优化
-
@Pacerier 实际上,在大多数 linux 内核中,
calloc确实优化了这一点,因为它有一个与所有其他页面分开的页面,始终设置为 0。当您第一次尝试写入它时,然后它将您尝试写入的页面更改为内存中新擦除的页面,以节省这些宝贵的资源。但是,我认为 java 中没有类似的东西。 -
理论上是可能的,我隐约记得有些系统尝试过这种事情。 (当然 APL 会这样做,但它是动态类型的。)但我不认为任何生产 Java 或类 C 的系统会这样做(除了 Richard 提到的 storage swizzle 之类的东西)。