Because memory leaks typically do not manifest themselves as obvious failures, they may remain present in a system for years. They are typically discovered only as a result of careful code inspection
A memory leak that I was once bitten by was a ThreadPoolExecutor. Even if you have fully dereferenced it, it won't get GC'd until you shut it down (by calling `shutdown()`). In other words, beware of this reasonable exception: unreferenced Threads don't get GC'd, even if they're sitting idle.