< prev index next >

src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/tools/ClassLoaderStats.java

Print this page




  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  *
  23  */
  24 
  25 package sun.jvm.hotspot.tools;
  26 
  27 import java.io.*;
  28 import java.util.*;
  29 
  30 import sun.jvm.hotspot.debugger.*;

  31 import sun.jvm.hotspot.memory.*;
  32 import sun.jvm.hotspot.oops.*;
  33 import sun.jvm.hotspot.runtime.*;
  34 import sun.jvm.hotspot.utilities.*;
  35 
  36 /**
  37   A command line tool to print class loader statistics.
  38 */
  39 
  40 public class ClassLoaderStats extends Tool {
  41    boolean verbose = true;
  42 
  43    public ClassLoaderStats() {
  44       super();
  45    }
  46 
  47    public ClassLoaderStats(JVMDebugger d) {
  48       super(d);
  49    }
  50 


  89 
  90       VM vm = VM.getVM();
  91       ObjectHeap heap = vm.getObjectHeap();
  92       Klass classLoaderKlass = vm.getSystemDictionary().getClassLoaderKlass();
  93       try {
  94          heap.iterateObjectsOfKlass(new DefaultHeapVisitor() {
  95                          public boolean doObj(Oop oop) {
  96                             loaderMap.put(oop, new LoaderData());
  97                                                         return false;
  98                          }
  99                       }, classLoaderKlass);
 100       } catch (Exception se) {
 101          se.printStackTrace();
 102       }
 103 
 104       if (verbose) {
 105          err.println("done.");
 106          err.print("computing per loader stat ..");
 107       }
 108 
 109       SystemDictionary dict = VM.getVM().getSystemDictionary();
 110       dict.classesDo(new SystemDictionary.ClassVisitor() {
 111                         public void visit(Klass k) {
 112                            if (! (k instanceof InstanceKlass)) {
 113                               return;
 114                            }
 115                            Oop loader = ((InstanceKlass) k).getClassLoader();
 116                            LoaderData ld = (loader != null) ? (LoaderData)loaderMap.get(loader)
 117                                                             : bootstrapLoaderData;
 118                            if (ld != null) {
 119                               ld.numClasses++;
 120                               long size = computeSize((InstanceKlass)k);
 121                               ld.classDetail.add(new ClassData(k, size));
 122                               ld.classSize += size;
 123                            }
 124                         }
 125                      });
 126 
 127       if (verbose) {
 128          err.println("done.");
 129          err.print("please wait.. computing liveness");
 130       }




  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  *
  23  */
  24 
  25 package sun.jvm.hotspot.tools;
  26 
  27 import java.io.*;
  28 import java.util.*;
  29 
  30 import sun.jvm.hotspot.debugger.*;
  31 import sun.jvm.hotspot.classfile.*;
  32 import sun.jvm.hotspot.memory.*;
  33 import sun.jvm.hotspot.oops.*;
  34 import sun.jvm.hotspot.runtime.*;
  35 import sun.jvm.hotspot.utilities.*;
  36 
  37 /**
  38   A command line tool to print class loader statistics.
  39 */
  40 
  41 public class ClassLoaderStats extends Tool {
  42    boolean verbose = true;
  43 
  44    public ClassLoaderStats() {
  45       super();
  46    }
  47 
  48    public ClassLoaderStats(JVMDebugger d) {
  49       super(d);
  50    }
  51 


  90 
  91       VM vm = VM.getVM();
  92       ObjectHeap heap = vm.getObjectHeap();
  93       Klass classLoaderKlass = vm.getSystemDictionary().getClassLoaderKlass();
  94       try {
  95          heap.iterateObjectsOfKlass(new DefaultHeapVisitor() {
  96                          public boolean doObj(Oop oop) {
  97                             loaderMap.put(oop, new LoaderData());
  98                                                         return false;
  99                          }
 100                       }, classLoaderKlass);
 101       } catch (Exception se) {
 102          se.printStackTrace();
 103       }
 104 
 105       if (verbose) {
 106          err.println("done.");
 107          err.print("computing per loader stat ..");
 108       }
 109 
 110       ClassLoaderDataGraph cldg = VM.getVM().getClassLoaderDataGraph();
 111       cldg.classesDo(new ClassLoaderDataGraph.ClassVisitor() {
 112                         public void visit(Klass k) {
 113                            if (! (k instanceof InstanceKlass)) {
 114                               return;
 115                            }
 116                            Oop loader = ((InstanceKlass) k).getClassLoader();
 117                            LoaderData ld = (loader != null) ? (LoaderData)loaderMap.get(loader)
 118                                                             : bootstrapLoaderData;
 119                            if (ld != null) {
 120                               ld.numClasses++;
 121                               long size = computeSize((InstanceKlass)k);
 122                               ld.classDetail.add(new ClassData(k, size));
 123                               ld.classSize += size;
 124                            }
 125                         }
 126                      });
 127 
 128       if (verbose) {
 129          err.println("done.");
 130          err.print("please wait.. computing liveness");
 131       }


< prev index next >