gcstatframe.java

来自「很棒的web服务器源代码」· Java 代码 · 共 156 行

JAVA
156
字号
// GcStatFrame.java// $Id: GcStatFrame.java,v 1.12 2003/09/25 21:30:24 ylafon Exp $// (c) COPYRIGHT MIT and INRIA, 1996.// Please first read the full copyright statement in file COPYRIGHT.htmlpackage org.w3c.jigsaw.status ;import org.w3c.www.http.HTTP;import org.w3c.www.http.HttpMessage;import org.w3c.tools.resources.Attribute;import org.w3c.tools.resources.AttributeHolder;import org.w3c.tools.resources.AttributeRegistry;import org.w3c.tools.resources.FramedResource;import org.w3c.tools.resources.IntegerAttribute;import org.w3c.jigsaw.http.Reply;import org.w3c.jigsaw.http.Request;import org.w3c.jigsaw.frames.HTTPFrame;import org.w3c.jigsaw.html.HtmlGenerator ;/** * This class implements a GC counter. * It counts the number of GC that has occured since the system was brought up. */class GcCounter {    private static int count= 0 ;    private static synchronized void incrCounter() {	count++ ;    }    private static synchronized int getCount() {	return count ;    }    public static int getGcCount() {	System.runFinalization() ;	return getCount() ;    }    public void finalize() {	incrCounter() ;	new GcCounter() ;    }    static {	new GcCounter() ;    }}/** * Each time you get this resource, it fill run the GC. */public class GcStatFrame extends HTTPFrame {    private static int REFRESH_DEFAULT = 30;    /**     * Attribute index - Our refresh interval.     */    protected static int ATTR_REFRESH = -1 ;    static {	Attribute a   = null ;	Class     cls = null ;	try {	    cls = Class.forName("org.w3c.jigsaw.status.GcStatFrame");	} catch (Exception ex) {	    ex.printStackTrace() ;	    System.exit(1) ;	}	// The refresh interval attribute:	a = new IntegerAttribute("refresh"				 , new Integer(5)				 , Attribute.EDITABLE) ;	ATTR_REFRESH = AttributeRegistry.registerAttribute(cls, a) ;    }    protected Runtime runtime = null ;    public void registerResource(FramedResource resource) {	super.registerOtherResource(resource);    }    /**     * Dump the current memory status.     * @param request The request we are to reply to.     */    protected Reply dumpMemoryStatus (Request request) {	HtmlGenerator g = new HtmlGenerator ("Memory Status") ;	int refresh = getInt(ATTR_REFRESH, REFRESH_DEFAULT);	if (refresh > 0) {	    g.addMeta("Refresh", Integer.toString(refresh));	}	addStyleSheet(g);	g.append("<h1>Memory status</h1>") ;	long bytes = runtime.freeMemory();	long kbytes = bytes / 1024;	long mbytes = kbytes / 1024;	if (mbytes != 0) {	    g.append("<p>Free Memory: " +mbytes+ "Mb, " +kbytes % 1024+ "Kb, " 		     + bytes % 1024 + " (" + Long.toString(bytes) +")");	} else if (kbytes != 0) {	    g.append("<p>Free Memory: " + kbytes + "Kb, " + bytes % 1024 +		     " (" + Long.toString(bytes) +")");	} else {	    g.append("<p>Free Memory:" + Long.toString(bytes));	}	bytes = runtime.totalMemory();	kbytes = bytes / 1024;	mbytes = kbytes / 1024;	if (mbytes != 0) {	    g.append("<p>Total Memory: "+mbytes+"Mb, " +kbytes % 1024+ "Kb, " 		     + bytes % 1024 + " (" + Long.toString(bytes) +")");	} else if (kbytes != 0) {	    g.append("<p>Total Memory: " + kbytes + "Kb, " + bytes % 1024 		     + " (" + Long.toString(bytes) +")");	} else {	    g.append("<p>Total Memory:", Long.toString(bytes));	}	g.append("<p>GC count: "+GcCounter.getGcCount()) ;	g.append("<hr>") ;	// Reply back:	Reply  reply = request.makeReply(HTTP.OK) ;	reply.setNoCache();	reply.setStream (g) ;	reply.setDynamic(true);	return reply ;    }    /**     * Perform a GC and display memory status.     * @param request The request to handle.     */    public Reply get (Request request) {	return dumpMemoryStatus(request) ;    }    /**     * Initialize the thread lister.     * Just get a pointer to our runtime object.     * @param values The default attribute values.     */    public void initialize(Object values[]) {	super.initialize(values) ;	runtime = Runtime.getRuntime() ;    }    }

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?