01: package net.sourceforge.squirrel_sql.plugins.dbcopy.util;
02:
03: /*
04: * Copyright (C) 2005 Rob Manning
05: * manningr@users.sourceforge.net
06: *
07: * This library is free software; you can redistribute it and/or
08: * modify it under the terms of the GNU Lesser General Public
09: * License as published by the Free Software Foundation; either
10: * version 2.1 of the License, or (at your option) any later version.
11: *
12: * This library is distributed in the hope that it will be useful,
13: * but WITHOUT ANY WARRANTY; without even the implied warranty of
14: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15: * Lesser General Public License for more details.
16: *
17: * You should have received a copy of the GNU Lesser General Public
18: * License along with this library; if not, write to the Free Software
19: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20: */
21:
22: /**
23: * A description of this class goes here...
24: */
25:
26: public class MemoryDiagnostics implements Runnable {
27:
28: Thread t = null;
29:
30: private volatile boolean shutdown = false;
31:
32: private static int sleepTimeMills = 10000;
33:
34: public MemoryDiagnostics() {
35: t = new Thread(this );
36: t.setName("MemoryDiagnosticsThread");
37: t.start();
38: }
39:
40: /* (non-Javadoc)
41: * @see java.lang.Runnable#run()
42: */
43: public void run() {
44: while (!shutdown) {
45: printMemoryUsage();
46: gc();
47: try {
48: Thread.sleep(sleepTimeMills);
49: } catch (InterruptedException e) {
50: // Probably shutting down.
51: }
52: }
53:
54: }
55:
56: public void printMemoryUsage() {
57: long total = Runtime.getRuntime().totalMemory();
58: long free = Runtime.getRuntime().freeMemory();
59: long max = Runtime.getRuntime().maxMemory();
60: System.out.println("MemoryDiagnostics.printMemoryUsage: Total="
61: + total);
62: System.out.println("MemoryDiagnostics.printMemoryUsage: Free="
63: + free);
64: System.out.println("MemoryDiagnostics.printMemoryUsage: Max="
65: + max);
66: if (total > (max / 2)) {
67: System.out.println("Memory allocation > 50%, running GC");
68: gc();
69: }
70: }
71:
72: public void gc() {
73: System.gc();
74: }
75:
76: public void shutdown() {
77: t.interrupt();
78: }
79:
80: }
|