Explicit destruction is not a feature of the
Java language. The destroy() method of a class is not use to garbage-collect it, it is invoked when the garbage collector is about to destroy the object. Its primary use to to close network/file connections and similar non-java resources, since the dependent objects of a class/class instance get destroyed when their referencing objects are destroyed - assuming no other objects also reference the dependent objects.
The closest thing you can get to "destroying" objects is to invoke the global gc() method to run the garbage collector out of sequence, and even then there's no guarantee that a specific object will get collected, since modern-day garbage collectors are no longer the brute-force round up everything programs that they used to be.
A more practical means of "destruction" is simply to null out the object references of any objects that you don't want cluttering up memory, thereby making them more eligible for garbage collection.
I rather doubt that actual servlet instances are
ever garbage-collected until actual application shutdown, since if the servlets are not idempotent, there could be all sorts of nasty subtle bugs introduced if a servlet was created, destroyed, and re-created with side-effects coming into or out of the servlet instantiation process.