You cannot "destroy" objects in
Java, only create them.
When a Java object is no longer referenced by anything, it becomes eligible for garbage collection. Garbage collection is an automatic process that can happen at unpredictable times. While it was possible to force garbage collection in early versions of Java, modern-day GC doesn't run the same way as it is more incremental, so while invoking the gc() method will probably free up some memory there is no guarantee that any specific object's destroy() method would get called.
In any event, a destroy() method should never be used as part of application logic because you neer know when - or if - it will be invoked. It is intended to release resources that normal garbage collection doesn't know how to release.
You certainly wouldn't want to go around doing stuff like that to objects like
Tomcat connectors that you are only "loaned".
The secret of how to be miserable is to constantly expect things are going to happen the way that they are "supposed" to happen.
You can have faith, which carries the understanding that you may be disappointed. Then there's being a willfully-blind idiot, which virtually guarantees it.