The problem is not just with the time it takes, but that most garbage collection algorithms are stop-the-world ( not sure if <i>any</i> of them are truly concurrent ). This can introduce correctness problems.<p>I used to work on a network management software that used ICMP polling to detect if network devices were down. We had a SEDA architecture, requests were put on a queue, timers were set and if the device did not respond within a timeout, we would mark the device as down.<p>Problem was, it so happened that in a high load system after we sent out the request, the garbage collector would kick in and take eons to return the system to running state. When the system returns, the timer events would fire and the handlers would note that the timeout has expired and mark the devices as down. The device could have responded in time to the requests but the system would not have detected it.<p>This is why I am weary of languages with mandatory garbage collection. I feel it should be a library in any serious systems language.