If by "de-referencing objects" you mean assigning null to the references, then if that helps you have found the places where you are retaining unnecessary references to objects. Setting references to null in unreferenced objects shouldn't help the garbage collector, as it already knows that the object containing the references is unreferenced so it won't follow the interior references when looking for live objects. Conversely, setting references to null for references that you are still using can lead to NullPointerExceptions later on, when they are hard to debug.
when i am running the application using -verbose:gc, i see that GC is working fine but though i keep the application idle for some time still the memory usage as seen in 'Task manager' continuously going up. I think this is causing the OOM.
is there any way we can find which threads are still running in the backgound?
To see the stack trace of all java threads, you can send SIGQUIT signal (Ctrl+\ on Solaris and Ctrl+Break on Windows) to your running application. And to get the stack trace of native threads also, you need to use native debugging tools e.g. pstack on unix systems and windbg on windows platform.