Hmmm...
Oh yes, it does.
When there are no more instances of a specific class, the class itself is
being disposed off. Creating new instance reloads the class.
> You see, your scenario couldn't exactly happen:
> The garbage collector cleans all class instances (in this case only one
> instance), but not the class itself. The class loader does not unload the
class
> bytecode, and the static fields do not reside in any of the class
instances that
> are released by the garbage collector. So the static fields shouldn't be
lost
> after garbage colection of the class instances.
>
> Lachezar Dobrev wrote:
>
> > Hi.
> > This MAY be totally wrong, but I have seen that in a different place
in a
> > different problem, in a different need. I got the same thing.
> >
> > Problem: Static varialbles are being reset from time to time.
> >
> > My Answer: The lifetime of the Servlets/EJBs/JSPs is defined by how
the
> > webcontainer/ejbcontainer handles requests and persistance. My GUESS is
that
> > this problem is as follows:
> >
> > 1. We load a class (Say MYClass)
> > 2. We use MYClass
> > 3. We free of use all objects of type MYClass.
> > --- Some time passes.
> > --- The Garbage Collector sees this class is not used anymore
and...
> > FREES IT!
> > 4. We try to use MYClass. It doesn't exist, so it is loaded.
> > --- On loading the static fields are reset.
> >
> > Now... Having in mind, that the Servlets/JSPs can be randomly freed
by
> > the container (Orion) this situation is quite real. Especialy if we use
that
> > Servlet/JSP not-so-often.
> >
> > My Resolution: Use a Singleton Class to keep all the needed Static
> > information:
> >
> > /** @todo Modify this class to suit your needs */
> >
> > public class StaticHolder{
> > private int Data = 0;
> >
> > private static StaticHolder theCopy = new StaticHolder();
> >
> > private StaticHolder(){}
> >
> > public static StaticHolder getCopy() { return theCopy; }
> >
> > public void incData() { Data++; }
> > public int getData() { return Data; }
> >
> > }
> >
> > /** @usage */
> > StaticHolder.getCopy().incData();
> > int count = Staticholder.getCopy().getData();
> >
> > Singleton classes are not disposed by the garbage collector (there is
> > always one reference to the object from the object itself).
> >
> > Another way is to define an instance of your servlet, that will hold
a
> > copy of itself :).
> >
> > public class MyServlet .......{
> >
> > private static MyServlet CopyHolder = new MyServlet();
> >
> > }
> >
> > This will keep your class always loaded.
> >
> > Hope this helps.
> > Lachezar
> >
> > > Sorry, But I do not understand what you mean.
> > > What I want is to have only a counter for all the requests.
> > >
> > >
> > > At 13:35 24/07/2001 -0500, you wrote:
> > > >Instead of static I would use a member attribute, since for servlets
> > > >only one instance exists for a given class.
> > > >
> > > >Ismael wrote:
> > > >
> > > > > I am making some loading tests, in order to test the loading tool
I
> > > > > have written some special jsp to deal verify the number of times a
jsp
> > > > > has been called.
> > > > > My jsp is :
> > > > >
> > > > > <%@page contentType="text/html"%>
> > > > > <html>
> > > > > <head><title>JSP Page</title></head>
> > > > > <body>
> > > > > <%!
> > > > > static int client=0;
> > > > > static String attribute_name="client";
> > > > > static Object lock=new Object();
> > > > > %>
> > > > > <%-- This JSP will be used with 4 other jsp to test the
correctness of
> > > > > the stress tool
> > > > > --%>
> > > > > <%
> > > > > synchronized (application) {
> > > > > session.setAttribute(attribute_name,new Integer(++client));
> > > > > System.out.println("Entering client "+client);
> > > > >
> > > > >
> > > > > }
> > > > > %>
> > > > > </body>
> > > > > </html>:
> > > > >
> > > > >
> > > > > It is very simple but the ouput I get is
> > > > > Entering client 1
> > > > > Entering client 2
> > > > > Entering client 3
> > > > > Entering client 4
> > > > > Entering client 1
> > > > > Entering client 1
> > > > > Entering client 1
> > > > > Entering client 1
> > > > > Entering client 1
> > > > > Entering client 5
> > > > > Entering client 2
> > > > > Entering client 3
> > > > > Entering client 4
> > > > > Entering client 5
> > > > > Entering client 6
> > > > > Entering client 7
> > > > > Entering client 8
> > > > > Entering client 9
> > > > > Entering client 10
> > > > > Entering client 11
> > > > > Entering client 12
> > > > > Entering client 13
> > > > > Entering client 14
> > > > > Entering client 15
> > > > > Entering client 16
> > > > > ..
> > > > > That is, my static variable it is being ignored. I am using Orion
> > > > > 1.4.5 , Windows 2000 and J2SE 1.3.0_02.
> > > > >
> > > > > Anybody know why this could be happening ?
> > > > >
> > > > > Regards,
> > > > > Ismael
> > > > >
> > > > >
> > >
> > >
>
>