EntityManagers seem to have been designed to be short lived much like a transaction. As such, they have their own cache (different from a shared cache) to maintain references to managed entities, and are not thread safe. While EclipseLink uses weak references by default (configurable through the ReferenceMode property), which allows untouched Entities to be garbage collected, using a single long lived EM for reading can still use large amounts of memory if care is not taken to detach entities before changing them - every query on that EM will see the uncommitted modifications otherwise. Changes made in other EntityManagers do not get reflected in Entities already loaded in the long lived EM unless it is cleared, so most apps generally find it easier to just obtain EMs as needed and close them when done rather than clearing them. Clear can also cause problems with triggering lazy relationships, as the relationship is resolved using the EM that loaded the entity.