[GHC] #10812: High memory usage
GHC
ghc-devs at haskell.org
Sat Aug 29 16:17:10 UTC 2015
#10812: High memory usage
---------------------------------+-----------------------------------------
Reporter: danilo2 | Owner:
Type: bug | Status: new
Priority: high | Milestone:
Component: Compiler | Version: 7.10.2
Resolution: | Keywords:
Operating System: MacOS X | Architecture: x86_64 (amd64)
Type of failure: None/Unknown | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Revisions:
---------------------------------+-----------------------------------------
Description changed by danilo2:
Old description:
> Hello, lets consider following program:
>
> {{{
> {-# LANGUAGE NoMonomorphismRestriction #-}
>
> import System.Mem.Weak
> import Control.Concurrent
> import System.Mem
>
> data Tst a = Tst a deriving (Show, Eq)
>
> tst a = do
> let arr = [0 .. a*a*a]
> v = Tst (seq arr arr)
> ptr <- mkWeakPtr v Nothing
> return ptr
>
> main = do
> ptrs <- mapM tst [1..100000000]
> --performGC
> --performMajorGC
> --performMinorGC
> threadDelay 1000000
> xr <- mapM deRefWeak ptrs
> print $ length $ filter (/= Nothing) xr
>
> threadDelay 5000000
>
> return ()
> }}}
>
> It simply creates 10 million of weak references to values of {{{Tst}}}.
> These weak pointers are returned in the main function. After that we
> sleep a second and ask how meany references are alive. I get the {{{0}}}
> as a result here - so everything seems ok - garbage collection worked.
> There is a problem though - somehow the memory was not released, because
> on the second 5-second sleep the program uses over 14 Gb of RAM on my
> computer.
>
> I'm compiling it simply with {{{ghc -O2 Main.hs}}}. I'm pretty sure this
> is a bug, because such behaviour is not expected I think.
New description:
Hello, lets consider following program:
{{{
{-# LANGUAGE NoMonomorphismRestriction #-}
import System.Mem.Weak
import Control.Concurrent
import System.Mem
data Tst a = Tst a deriving (Show, Eq)
tst a = do
let arr = [0 .. a*a*a]
v = Tst (seq arr arr)
ptr <- mkWeakPtr v Nothing
return ptr
main = do
ptrs <- mapM tst [1..100000000]
--performGC
--performMajorGC
--performMinorGC
threadDelay 1000000
xr <- mapM deRefWeak ptrs
print $ length $ filter (/= Nothing) xr
threadDelay 5000000
return ()
}}}
It simply creates 10 million of weak references to values of {{{Tst}}}.
These weak pointers are returned in the main function. After that we sleep
a second and ask how meany references are alive. I get the {{{0}}} as a
result here - so everything seems ok - garbage collection worked. There is
a problem though - somehow the memory was not released, because during the
last 5-second sleep the program uses over 14 Gb of RAM on my computer.
I'm compiling it simply with {{{ghc -O2 Main.hs}}}. I'm pretty sure this
is a bug, because such behaviour is not expected I think.
--
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/10812#comment:2>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list