2012-06-20 34 views
0

想象一下,您正在模擬粒子物理。那麼,你的每個物體都有一個位置矢量,它以每秒幾次的速度改變。如果你的向量沒有被破壞而只是被複制,那麼這會不會導致你的程序在內存溢出之前氾濫?使用不可變列表是否需要大量內存?

回答

1

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

我會盡力的。

你,那麼,對每個對象的

我只是認爲那些只是每個SIM抽象的基本粒子,實驗數據不TB的幾個位置向量。

它以每秒幾次的速率改變。如果你的向量沒有被破壞而只是被複制,那麼這會不會導致你的程序使用過多的內存直到它結束?

除上述所有上下文外,這是一個非常基本的問題。答案是「視情況而定」。

收集您的語言垃圾嗎?特別是哪種語言(沒有雙關語意思)?

你需要提供歷史數據嗎?或者更一般地說,首先不破壞載體的原因是什麼?他們都仍然被積極使用,引用?

如果你需要所有的SIM卡,即對上述問題的答案是:是的,但你可以做的不多。也許a)使用尺寸優化的,可能是自定義的數據和列表類型,b)如果實際適用 - 取決於數據的易變性 - 應用一種模式,允許您只存儲差異(不變的矢量可以作爲以前的版本等)

如果你不需要他們的運行SIM卡,但需要保持他們「爲以後」,只需將它們衝出光盤足夠大,以避免浪費IO週期,之後步驟同樣適用於...:

如果您完全不需要它們,請確保允許垃圾回收器有效地工作(同樣,細節取決於使用的語言)或釋放它們或重新使用分配的內存等...

這是一個非常普遍的問題和你給的上下文,雖然它讓你感興趣,但並沒有給我們太多的幫助。

+0

你的程序洪水*(在我的帖子中的錯誤),我問這是因爲這個概念,讓所有的東西不可變=好,我不知道我明白。 – MaiaVictor

-1

當然,取決於列表的大小。

我不會把位置向量在粒子物理學中的不可變列表類,因爲他們很可能是短暫的和不斷變化的(除非你打破費米的原則,並讓他們固定。)

我要說美國國家縮寫名單將是更好的選擇,因爲這些縮寫不會改變 - 不包括分離運動和戰爭。

1

如果你在談論java,垃圾收集是自動的,並且可以隨時發生。我製作了一個程序,將matrix1複製到matrix2和matrix2到matrix3(每個2k個元素),每秒1000次。沒問題:)

+0

哇,很高興知道。 – MaiaVictor

相關問題