2 * Created on Aug 3, 2004
4 * To change the template for this generated file go to
5 * Window - Preferences - Java - Code Generation - Code and Comments
7 package de.laures.cewolf.storage;
9 import java.util.Calendar;
10 import java.util.Collection;
11 import java.util.Date;
12 import java.util.GregorianCalendar;
13 import java.util.HashMap;
14 import java.util.Iterator;
20 * To change the template for this generated type comment go to Window -
21 * Preferences - Java - Code Generation - Code and Comments
23 public class SessionStorageGroup implements Runnable
25 private Map map = new HashMap();
30 if ( runner == null || !runner.isAlive() )
32 runner = new Thread(this);
33 runner.setDaemon(false);
34 runner.setName("SessionCleanup");
35 runner.setPriority(Thread.MIN_PRIORITY);
40 public synchronized Object get( Object a )
45 public synchronized Object put( Object a, Object b )
47 Object c = map.put(a, b);
52 public synchronized Object remove( Object a )
59 * @see java.lang.Runnable#run()
63 while ( !map.isEmpty() )
65 Date date = new Date();
68 Collection keys = map.keySet();
70 Iterator iter = keys.iterator();
72 while ( iter.hasNext() )
74 // System.out.println("Get Next");
75 String cid = (String) iter.next();
76 SessionStorageItem ssi = (SessionStorageItem) get(cid);
77 if ( ssi.isExpired(date) )
79 // System.out.println("Removing " + ssi);
89 catch (InterruptedException e)
91 // TODO Auto-generated catch block
95 // System.out.println("Exiting Thread");
97 public static void main( String[] args )
102 System.out.println("Adding Objects");
109 catch (InterruptedException e)
111 // TODO Auto-generated catch block
117 public static void testThread(int start)
119 SessionStorageGroup ssg = new SessionStorageGroup();
120 Calendar cal = new GregorianCalendar();
121 cal.setTime(new Date());
122 // some huge garbage string
124 for (int i = start; i < start+10000; i++)
126 cal.add(Calendar.MILLISECOND, 1);
127 SessionStorageItem ssi = new SessionStorageItem(null, Integer.toString(i), cal.getTime());
128 ssg.put(Integer.toString(i), ssi);
134 * Test that memory is freed up when low on it...
136 public static void testSoftreferenceMemoryFreeup()
138 Date neverexpire = new Date(10000, 1, 1);
139 SessionStorageGroup ssg = new SessionStorageGroup();
141 // some huge garbage string
142 StringBuffer longString = new StringBuffer();
143 for (int i = 0; i < 10000; i++)
145 longString.append(Math.random());
149 long minmem = Long.MAX_VALUE;
152 // let's use the id string to waste memory
153 String key = Long.toString(System.currentTimeMillis());
154 String id = key + longString;
155 SessionStorageItem ssi = new SessionStorageItem(null, id, neverexpire);
159 long freemem = Runtime.getRuntime().freeMemory();
160 long usedmem = Runtime.getRuntime().totalMemory();
161 long maxmem = Runtime.getRuntime().maxMemory();
162 if ( freemem < minmem )
168 System.out.println("#" + i + ", minimum memory:" + minmem + ", freemem:" + freemem
169 + ", usedmem:" + usedmem + ", maxmem:" + maxmem);