Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

When exactly a servlet is destroyed?

Tags:

java

jsp

servlets

I'm checking a Java Servlet tutorial, but I miss the information of when exactly the servlet is destroyed by the server? and what if I want to destroy manually an unused Servlet to conserve a memory for other tasks!

Because as I know every server has its limit in memory and hosting unused servlets is wasting of resources and application quality,

Thank you to clarify this point because the application performance is one of the most important issue to care about during the development process!

like image 544
O.Badr Avatar asked Jul 18 '14 19:07

O.Badr


3 Answers

There is only one instance of the Servlet on each node in multi-clustered environment or you can say there is only one instance of each Servlet on each JVM machine.

Servlet is initialized on application startup or at the first time when the servlet is invoked.

when exactly the servlet is destroyed by the server?

All the Servlet instances are destroyed when server is shutting down or on application disposal.

I want to destroy manually an unused Servlet to conserve a memory for other tasks!

You can't destroy the Servlet manually and Servlet is just like worker not for data container. In most of the cases Servlet doesn't contain any instance members to avoid multi-threading issues.

like image 196
Braj Avatar answered Sep 18 '22 04:09

Braj


The Servlet specification does not say when a servlet must be shut down and destroyed, other than that it must be done before the container completes a normal shutdown. A container is otherwise permitted to remove an idle instance from service at its own discretion, as long as it is prepared to fire up a new instance later if one is needed.

The specification does not define a mechanism for forcing a servlet instance to be unloaded. It having been unloaded, reclaiming its resources (mostly memory) is the job of the garbage collector, and when that happens is difficult to influence.

Overall, these are exactly the kind of details that you choose Java technology to avoid worrying about. If you insist on worrying about them anyway then look to the documentation of your chosen servlet container -- if there is a supported way to do what you are after then you will find it documented there. Such a thing would be container-specific.

like image 23
John Bollinger Avatar answered Sep 18 '22 04:09

John Bollinger


The container decides when to unload the servlet , this sequence releases any resources it is holding so that it can reacquire it if the servlet is loaded again.

the unloading sequence calls a servlet's destroy() method when the servlet is set to be unloaded. The destroy() method houses the clean up actions written by the servlet developer. In practice it should free any resources it has acquired that will not be garbage collected at this step. The destroy() method should also give the servlet a chance to write out its unsaved cached information or any persistent information that should be read during the next call to init().

if we call destroy() on servlet then it doesn't mean that our servlet will be unloaded. You can simply call the destroy method alone without unloading the servlet. However when the container decides to unload the servlet instance from memory then container runs destruction mechanism and destroy method is one of steps of the destruction mechanism.

like image 27
etr Avatar answered Sep 21 '22 04:09

etr