On Thu, Jul 7, 2016 at 4:10 PM, Thuener Silva <[email protected]> wrote:
> I have a code that uses a lot of memory and I'm trying to release some of it
> but without success. I made up an examples to illustrate the problem:
>
> function memuse()
>   return string(round(Int,parse(Int,readall(`ps -p 29563 -o
> rss=`))/1024),"M")
> end
>
> function test()
>   for i = 1:2
>    println("\ni=$i")
>    a = rand(10000,10000)
>    println("Created a $(memuse())")
>    a = 0
>    gc()
>    println("Release a $(memuse())\n")
>
>    b = rand(10000,10000)
>    println("Created b $(memuse())")
>    b = 0
>    gc()
>    println("Release b $(memuse())\n")
>
>    c = rand(10000,10000)
>    println("Created c $(memuse())")
>    c =0
>    gc()
>    println("Release c $(memuse())\n")
>   end
> end
>
> test()
>
>
> Output:
>
> i=1
> Created a 918M
> Release a 918M
>
> Created b 1681M
> Release b 1681M
>
> Created c 2444M
> Release c 2444M
>
>
> i=2
> Created a 3207M
> Release a 2444M
>
> Created b 3207M
> Release b 2444M
>
> Created c 3207M
> Release c 2444M
>
>
>
>
> This code only needs 918M to run but uses 3207M.
>
> Questions:
> Why gc() is not releasing unused memory?
> There is some way to force garbage collector to release?
> Why garbage collector releases some memory only on the second iteration?

There's no guarantee that the a/b/c = 0 clears the reference.

>
>
> Thanks,
> Thuener
>

Reply via email to