Hi. PrimaryKey wrote: > Based on that I will appreciate your thoughts on why a language having > such advanced OO features is lacking in these areas and is there any way > to emulate these. Actually, destructor in Java, i.e., finalize( ), does not well behave. Moreover, using it properly is next to impossible. Have a look at: http://developers.sun.com/learning/javaoneonline/2005/coreplatform/TS-3281.html Here's the recap: (1) Java finalizer is not guranteed to run. (2) Java finalizer is not executed in the main thread. Instead, it runs in its own thread. Hence, synchronization mechanism for read/write visibility and concurrency control is required. (3) If java finalizer access a certain object which is already garbage collected, then the object will resurrect. To avoid this situation, you should not access garbage collected object while finalizing, but it is not easy because there's no certain order in garbage collection. Instead of relying on finalize, you'd better use dispose pattern like: class Foo def dispose # release all non-managed resources end end You can find similar interface, IDisposable, in C#. The reason is that people developed C# already found that writing destructor for releasing unmanaged resources is not simple than writing explicit dispose method. Sincerely, Minkoo Seo