【发布时间】:2011-06-12 18:12:14
【问题描述】:
给定程序:
import Language.Haskell.Exts.Annotated -- from haskell-src-exts
import System.Mem
import System.IO
import Control.Exception
main :: IO ()
main = do
evaluate $ length $ show $ fromParseResult $ parseFileContents $ "data C = C {a :: F {- " ++ replicate 400000 'd' ++ " -} }"
performGC
performGC
performGC
使用 GHC 7.0.3,当我运行时:
$ ghc --make Temp.hs -rtsopts && Temp.exe +RTS -G1 -S
Alloc Copied Live GC GC TOT TOT Page Flts
bytes bytes bytes user elap user elap
...
29463264 64 8380480 0.00 0.00 0.64 0.85 0 0 (Gen: 0)
20 56 8380472 0.00 0.00 0.64 0.86 0 0 (Gen: 0)
0 56 8380472 0.00 0.00 0.64 0.87 0 0 (Gen: 0)
42256 780 33452 0.00 0.00 0.64 0.88 0 0 (Gen: 0)
0 0.00 0.00
performGC 调用似乎保留了 8Mb 的内存,即使看起来所有内存都应该死掉。怎么会?
(没有-G1我看到最后是10Mb,我也无法解释。)
【问题讨论】:
-
我意识到这是一个完全无用的评论,但我真的很喜欢在这里看到比我更了解 Haskell 的人提出的问题,因为接下来的答案往往非常引人入胜。 :]
-
嗯,与“不要,但是
unsafePerformIO”、“fromIntegral”和“将制表符转换为空格”等问题的源源不断的问题相比,这是一个很好的变化......跨度>
标签: haskell garbage-collection ghc