1 14 15 package org.quickserver.net.server; 16 17 import org.quickserver.net.*; 18 import java.util.HashMap; 19 import java.util.logging.*; 20 21 33 public class ObjectCleaner extends Thread implements ServerHook { 34 private static Logger logger = Logger.getLogger(ObjectCleaner.class.getName()); 35 36 private QuickServer quickserver; 37 private static ObjectCleaner objectCleaner; 38 39 40 public void initHook(QuickServer quickserver) { 41 this.quickserver = quickserver; 42 } 43 44 public boolean handleEvent(int event) { 45 if(event==ServerHook.POST_STARTUP) { 46 if(objectCleaner==null) { 47 startCleaner(); 48 return true; 49 } 50 } 51 return false; 52 } 53 54 public String info() { 55 if(objectCleaner!=null) 56 return "ObjectCleaner - ServerHook [Every "+time+"min]"; 57 else 58 return "ObjectCleaner - ServerHook"; 59 } 60 61 private void startCleaner() { 62 HashMap appConfig = quickserver.getConfig().getApplicationConfiguration(); 65 if(appConfig!=null) { 66 String temp = (String)appConfig.get("ServerHook-ObjectCleaner-Time-Minute"); 68 logger.fine("ServerHook-ObjectCleaner-Time-Minute got from XML is: "+temp); 69 int lt = 60; 70 if(temp!=null) { 71 try { 72 lt = Integer.parseInt(temp); 73 objectCleaner = new ObjectCleaner(lt); 74 objectCleaner.start(); 75 } catch(Exception e) { 76 logger.warning("Exception getting time from xml : "+e); 77 } 78 } 79 } 80 } 81 82 private static final int MINUTE = 1000 * 60; 83 private long time = MINUTE * 60; private Runtime runtime; 85 86 87 public ObjectCleaner() { 88 } 89 90 95 public ObjectCleaner(int min) { 96 super("Clean Up"); 97 setPriority(Thread.MIN_PRIORITY); 98 setDaemon(true); if(min > 0) 100 time = MINUTE * min; 101 runtime = Runtime.getRuntime(); 102 } 103 104 public void run() { 105 logger.fine("Thread started, with time="+time); 106 while (true) { 107 try { 108 sleep(time); 109 float totalMemory = (float) runtime.totalMemory(); 110 float usedMemory = totalMemory - (float) runtime.freeMemory(); 111 logger.fine("UsedMemory Before: "+usedMemory); 112 System.gc(); 113 usedMemory = totalMemory - (float) runtime.freeMemory(); 114 logger.fine("UsedMemory After: "+usedMemory); 115 logger.fine("Cleanup finished"); 116 } catch(Exception e) { 117 logger.warning("Error while cleaning " + e); 118 break; 119 } 120 } 121 } 122 } 123 | Popular Tags |