0

想象一下,您正在模拟粒子物理。然后,您的每个对象都有一个以每秒数次的速度变化的位置向量。如果您的向量没有被破坏而只是被复制,这不会导致您的程序在结束之前淹没您的内存吗?

4

3 回答 3

1

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

于 2012-06-20T20:21:33.303 回答
1

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

我会尽力。

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

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

它以每秒数次的速度变化。如果您的向量没有被破坏而只是被复制,这不会导致您的程序使用过多的内存直到它结束吗?

除了上述所有内容之外,这是一个非常基本的问题。答案是“视情况而定”。

你的语言垃圾被收集了吗?它特别是什么语言(没有双关语)?

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

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

如果您不需要它们来运行 sim,但需要保留它们“以备后用”,只需将它们以足够大的块刷新到磁盘中,以免浪费 IO 周期,在该步骤之后,同样适用于...:

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

这是一个非常笼统的问题,你给出的上下文虽然让你很有趣,但并没有真正给我们太多的继续。

于 2012-06-20T20:32:55.187 回答
-1

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

我不会将粒子物理学中的位置向量放在不可变列表类别中,因为它们很可能是瞬态的和不断变化的(除非你打破了费米原理并将它们固定下来。)

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

于 2012-06-20T20:21:14.957 回答