"In Java, memory leaks must always be related somehow to a long-lived object."
A long-lived object is a Singleton, or something that will live as long as the application is running.
We can turn the statement around a bit and phrase it in the form of a question. You can ask:
Is it possible to have memory leaks in a Java application that are not related to a Singleton or other core component (that is long-lived by design)?
As we know, and many here have pointed out, memory leaks in the context of Java are essentially objects to which there are inadvertant strong references remaining, rendering them unavailable to the garbage collector.
In order to answer our new question, we would need to imagine a scenario in which we have a pair of objects that would normally be garbage collected after they move out of scope, but have created a circular reference (two or more objects that have strong references to each other). Here there would be strong references to these objects, and as they have both gone out of scope, they are no longer tied to any 'long-lived' objects. Would they be considered leaks?
To answer this, kdgregory has posted in his blog an article entitled "Java Reference Objects or 'How I Learned to Stop Worrying and Love OutOfMemoryError'":
You may be wondering what happens if you have a circular reference: object A contains a reference to object B, which contains a reference back to A. The answer is that a mark-sweep collector isn't fooled: if neither A nor B can be reached by a chain of strong references, then they're eligible for collection.