There are leaks, and then there are "leaks". Memory that you have allocated and no longer have a reference to is a leak. Memory that you have a reference to but have stopped having use for is a "leak". It is hard to build tools to detect "leaks" because you don't know if the programmer intended to have a boundlessly growing collection or if it was an accident.