There are two ways on initializing an object one it to create it from scratch. The other is to reset an existing object to it's initial state.
Ultimately like a lot of other things with software development it comes down to an estimate of costs involved.
Singletons are easy to implement and in most cases provide a resource efficient solution, however they cannot be used in non thread safe conditions. e.g. SimpleDateFormat as a singleton will provide "random" errors.
Object-Pools are useful in these situations where the cost of creating the object is significantly more expensive than resetting it, however they are not trivial to implement so if you do not have a ready made one and there is no pressing reason to implement one then following normal Object Create/Destroy flow is the better approach.