Extreme memory usage when `synchronized( this )` is used
tcak via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Mon May 11 02:09:07 PDT 2015
[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]
More information about the Digitalmars-d-learn
mailing list