KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > de > laures > cewolf > storage > SessionStorageGroup


1 /*
2  * Created on Aug 3, 2004
3  *
4  * To change the template for this generated file go to
5  * Window - Preferences - Java - Code Generation - Code and Comments
6  */

7 package de.laures.cewolf.storage;
8
9 import java.util.Calendar JavaDoc;
10 import java.util.Collection JavaDoc;
11 import java.util.Date JavaDoc;
12 import java.util.GregorianCalendar JavaDoc;
13 import java.util.HashMap JavaDoc;
14 import java.util.Iterator JavaDoc;
15 import java.util.Map JavaDoc;
16
17 /**
18  * @author brianf
19  *
20  * To change the template for this generated type comment go to Window -
21  * Preferences - Java - Code Generation - Code and Comments
22  */

23 public class SessionStorageGroup implements Runnable JavaDoc
24 {
25   private Map JavaDoc map = new HashMap JavaDoc();
26   Thread JavaDoc runner;
27
28   private void start()
29   {
30     if ( runner == null || !runner.isAlive() )
31     {
32       runner = new Thread JavaDoc(this);
33       runner.setDaemon(false);
34       runner.setName("SessionCleanup");
35       runner.setPriority(Thread.MIN_PRIORITY);
36       runner.start();
37     }
38   }
39
40   public synchronized Object JavaDoc get( Object JavaDoc a )
41   {
42     return map.get(a);
43   }
44
45   public synchronized Object JavaDoc put( Object JavaDoc a, Object JavaDoc b )
46   {
47     Object JavaDoc c = map.put(a, b);
48     start();
49     return c;
50   }
51
52   public synchronized Object JavaDoc remove( Object JavaDoc a )
53   {
54     return map.remove(a);
55   }
56   /*
57    * (non-Javadoc)
58    *
59    * @see java.lang.Runnable#run()
60    */

61   public void run()
62   {
63     while ( !map.isEmpty() )
64     {
65       Date JavaDoc date = new Date JavaDoc();
66       synchronized (this)
67       {
68         Collection JavaDoc keys = map.keySet();
69
70         Iterator JavaDoc iter = keys.iterator();
71
72         while ( iter.hasNext() )
73         {
74           // System.out.println("Get Next");
75
String JavaDoc cid = (String JavaDoc) iter.next();
76           SessionStorageItem ssi = (SessionStorageItem) get(cid);
77           if ( ssi.isExpired(date) )
78           {
79            // System.out.println("Removing " + ssi);
80
iter.remove();
81           }
82         }
83       }
84       try
85       {
86         //System.gc();
87
Thread.sleep(1000);
88       }
89       catch (InterruptedException JavaDoc e)
90       {
91         // TODO Auto-generated catch block
92
e.printStackTrace();
93       }
94     }
95    // System.out.println("Exiting Thread");
96
}
97   public static void main( String JavaDoc[] args )
98   {
99     int start = 0;
100    while(true)
101     {
102       System.out.println("Adding Objects");
103     testThread(start);
104     
105     try
106     {
107       Thread.sleep(10000);
108     }
109     catch (InterruptedException JavaDoc e)
110     {
111       // TODO Auto-generated catch block
112
e.printStackTrace();
113     }
114     }
115   }
116
117   public static void testThread(int start)
118   {
119     SessionStorageGroup ssg = new SessionStorageGroup();
120     Calendar JavaDoc cal = new GregorianCalendar JavaDoc();
121     cal.setTime(new Date JavaDoc());
122     // some huge garbage string
123

124     for (int i = start; i < start+10000; i++)
125     {
126       cal.add(Calendar.MILLISECOND, 1);
127       SessionStorageItem ssi = new SessionStorageItem(null, Integer.toString(i), cal.getTime());
128       ssg.put(Integer.toString(i), ssi);
129     }
130
131
132   }
133   /**
134    * Test that memory is freed up when low on it...
135    */

136   public static void testSoftreferenceMemoryFreeup()
137   {
138     Date JavaDoc neverexpire = new Date JavaDoc(10000, 1, 1);
139     SessionStorageGroup ssg = new SessionStorageGroup();
140
141     // some huge garbage string
142
StringBuffer JavaDoc longString = new StringBuffer JavaDoc();
143     for (int i = 0; i < 10000; i++)
144     {
145       longString.append(Math.random());
146     }
147
148     int i = 0;
149     long minmem = Long.MAX_VALUE;
150     while ( true )
151     {
152       // let's use the id string to waste memory
153
String JavaDoc key = Long.toString(System.currentTimeMillis());
154       String JavaDoc id = key + longString;
155       SessionStorageItem ssi = new SessionStorageItem(null, id, neverexpire);
156       ssg.put(key, ssi);
157
158       i++;
159       long freemem = Runtime.getRuntime().freeMemory();
160       long usedmem = Runtime.getRuntime().totalMemory();
161       long maxmem = Runtime.getRuntime().maxMemory();
162       if ( freemem < minmem )
163       {
164         minmem = freemem;
165       }
166       if ( i % 100 == 0 )
167       {
168         System.out.println("#" + i + ", minimum memory:" + minmem + ", freemem:" + freemem
169             + ", usedmem:" + usedmem + ", maxmem:" + maxmem);
170       }
171     }
172
173   }
174 }
175
176
Popular Tags