KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > quickserver > net > server > ObjectCleaner


1 /*
2  * This file is part of the QuickServer library
3  * Copyright (C) 2003-2005 QuickServer.org
4  *
5  * Use, modification, copying and distribution of this software is subject to
6  * the terms and conditions of the GNU Lesser General Public License.
7  * You should have received a copy of the GNU LGP License along with this
8  * library; if not, you can download a copy from <http://www.quickserver.org/>.
9  *
10  * For questions, suggestions, bug-reports, enhancement-requests etc.
11  * visit http://www.quickserver.org
12  *
13  */

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 /**
22  * Class (Server Hook) that forces the garbage collection.
23  * <p>
24  * It runs as a daemon thread with MIN_PRIORITY. It will
25  * look for <code>ServerHook-ObjectCleaner-Time-Minute</code> key
26  * in ApplicationConfiguration of QuickServer. Default time interval is 60 min.
27  * Use of this hook is highly discouraged unless you have a specific need to do so.
28  * </p>
29  * @author Akshathkumar Shetty
30  * @see org.quickserver.util.xmlreader.ApplicationConfiguration
31  * @since 1.3.3
32  */

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         //get the cleanup time from config. file.
63
//ServerHook-ObjectCleaner-Time-Minute
64
HashMap appConfig = quickserver.getConfig().getApplicationConfiguration();
65         if(appConfig!=null) {
66             //check if time was set in xml
67
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; //defaults to 60 min
84
private Runtime runtime;
85
86
87     public ObjectCleaner() {
88     }
89
90     /**
91      * Creates a new ObjectCleaner object as a daemon thread.
92      * @param min Time in minute to sleep before trying to cleanup,
93      * is set only if &gt; 0 else set to 5 min.
94      */

95     public ObjectCleaner(int min) {
96         super("Clean Up");
97         setPriority(Thread.MIN_PRIORITY);
98         setDaemon(true); //v1.2
99
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