1 7 package de.laures.cewolf.storage; 8 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 ; 15 import java.util.Map ; 16 17 23 public class SessionStorageGroup implements Runnable 24 { 25 private Map map = new HashMap (); 26 Thread runner; 27 28 private void start() 29 { 30 if ( runner == null || !runner.isAlive() ) 31 { 32 runner = new Thread (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 get( Object a ) 41 { 42 return map.get(a); 43 } 44 45 public synchronized Object put( Object a, Object b ) 46 { 47 Object c = map.put(a, b); 48 start(); 49 return c; 50 } 51 52 public synchronized Object remove( Object a ) 53 { 54 return map.remove(a); 55 } 56 61 public void run() 62 { 63 while ( !map.isEmpty() ) 64 { 65 Date date = new Date (); 66 synchronized (this) 67 { 68 Collection keys = map.keySet(); 69 70 Iterator iter = keys.iterator(); 71 72 while ( iter.hasNext() ) 73 { 74 String cid = (String ) iter.next(); 76 SessionStorageItem ssi = (SessionStorageItem) get(cid); 77 if ( ssi.isExpired(date) ) 78 { 79 iter.remove(); 81 } 82 } 83 } 84 try 85 { 86 Thread.sleep(1000); 88 } 89 catch (InterruptedException e) 90 { 91 e.printStackTrace(); 93 } 94 } 95 } 97 public static void main( String [] 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 e) 110 { 111 e.printStackTrace(); 113 } 114 } 115 } 116 117 public static void testThread(int start) 118 { 119 SessionStorageGroup ssg = new SessionStorageGroup(); 120 Calendar cal = new GregorianCalendar (); 121 cal.setTime(new Date ()); 122 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 136 public static void testSoftreferenceMemoryFreeup() 137 { 138 Date neverexpire = new Date (10000, 1, 1); 139 SessionStorageGroup ssg = new SessionStorageGroup(); 140 141 StringBuffer longString = new StringBuffer (); 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 String key = Long.toString(System.currentTimeMillis()); 154 String 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 |