使用不可变列表是否需要大量内存?

时间:2012-06-20 20:18:14

标签: list memory immutability

想象一下,你正在模拟粒子物理学。然后,您为每个对象设置了一个位置向量,该向量以每秒几次的速率变化。如果你的矢量没有被销毁但只是被复制了,这不会导致你的程序在它结束之前充斥你的记忆吗?

3 个答案:

答案 0 :(得分:1)

如果你在谈论java,垃圾收集是自动的,可以随时发生。我制作了一个程序,将matrix1复制到matrix2,将matrix2复制到matrix3(每个2k元素),每秒1000次。没问题:)

答案 1 :(得分:1)

  

想象一下,你正在模拟粒子物理学。

我会试试。

  

然后,您拥有每个对象的位置向量

我只是假设这些只是每个sim的少量抽象基本粒子,而不是太字节的实验数据。

  

以每秒几次的速度改变。如果你的向量没有被摧毁但只是被复制了,这不会导致你的程序使用过多的内存直到它结束了吗?

除了上述所有背景之外,这是一个非常基本的问题。答案是“它取决于”。

您的语言垃圾是否被收集?是什么语言(没有双关语意)?

您需要历史数据吗?或者更一般地说,首先不破坏向量的原因是什么?是否所有这些都被积极使用,参考?

如果您需要所有这些用于SIM卡,即上述问题的答案是:是的,但您无能为力。也许a)使用大小优化的,可能是自定义的数据和列表类型,b)如果实际适用 - 取决于数据的波动性 - 应用允许您仅存储差异的模式(未更改的向量可以存储为对以前的版本等。)

如果您不需要它们用于运行SIM卡,但需要将它们“保留”以供以后使用,只需将它们以足够大的块清除到光盘中,以免浪费IO周期,在此步骤之后同样适用。 ..:

如果您根本不需要它们,请确保允许垃圾收集器有效工作(再次,细节取决于所使用的语言)或释放它们或重新使用分配的内存等...

这是一个相当普遍的问题和你给出的背景,虽然它让你感兴趣,但并没有给我们带来太大的帮助。

答案 2 :(得分:-1)

当然,取决于列表的大小。

我不会将粒子物理中的位置向量放在不可变列表类别中,因为它们可能是瞬态变化的(除非你破坏了费米的原理并修复它们。)

我想说美国州名缩略列表是一个更好的候选人,因为那些不会改变 - 不包括分裂运动和战争。