On Mon, 11 May 2015 09:09:07 +0000
tcak via Digitalmars-d-learn <digitalmars-d-learn@puremagic.com> wrote:

> [code]
> import std.stdio;
> 
> class Connection{
>       private void other() shared{}
> 
>       public void close() shared{
>               synchronized( this ){
>                       other();
>               }
>       }
> 
>       public void hasData() shared{ writeln("Has Data"); }
> }
> 
> void main() {
>       for(long i=0; i < 250_000_000; ++i){
>               auto conn = new shared Connection();
> 
>               conn.hasData();
> 
>               conn.close();
>       }
> }
> [/code]
> 
> With this code, memory usage of program is increasing very fast. 
> In about 10 seconds, it reached 100MB for me.
> 
> If I comment out `synchronized( this )` line with its 
> parentheses, OR remove `(this)` from it, it suddenly turns 
> normal. Very little memory usage.
> 
> What's happening? Is object instance being stored somewhere at 
> each iteration?
> 
> --
> 
> I tried the same thing by creating synchronisation object instead 
> of object itself as blow, still usage lots of memory.
> 
> [code]
> import std.stdio;
> 
> class Connection{
>       private Object syncObject;
> 
>       public this() shared{
>               syncObject = new shared Object();
>       }
> 
>       private void other() shared{}
> 
>       public void close() shared{
>               synchronized( syncObject ){
>                       other();
>               }
>       }
> 
>       public void hasData() shared{ writeln("Has Data"); }
> }
> 
> void main() {
>       for(long i=0; i < 250_000_000; ++i){
>               auto conn = new shared Connection();
> 
>               conn.hasData();
> 
>               conn.close();
>       }
> }
> [/code]

I think synchronize(this) prevents GC from collect memory

Reply via email to