hotspot/src/share/vm/runtime/aprofiler.cpp
changeset 13728 882756847a04
parent 7397 5b173b4ca846
child 15228 e92acc84ade3
--- a/hotspot/src/share/vm/runtime/aprofiler.cpp	Fri Aug 31 16:39:35 2012 -0700
+++ b/hotspot/src/share/vm/runtime/aprofiler.cpp	Sat Sep 01 13:25:18 2012 -0400
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,7 +25,6 @@
 #include "precompiled.hpp"
 #include "classfile/systemDictionary.hpp"
 #include "gc_interface/collectedHeap.inline.hpp"
-#include "memory/permGen.hpp"
 #include "memory/resourceArea.hpp"
 #include "memory/space.hpp"
 #include "oops/oop.inline.hpp"
@@ -34,35 +33,19 @@
 
 
 bool AllocationProfiler::_active = false;
-GrowableArray<klassOop>* AllocationProfiler::_print_array = NULL;
+GrowableArray<Klass*>* AllocationProfiler::_print_array = NULL;
 
 
 class AllocProfClosure : public ObjectClosure {
  public:
   void do_object(oop obj) {
-    Klass* k = obj->blueprint();
+    Klass* k = obj->klass();
     k->set_alloc_count(k->alloc_count() + 1);
     k->set_alloc_size(k->alloc_size() + obj->size());
   }
 };
 
 
-#ifndef PRODUCT
-
-class AllocProfResetClosure : public ObjectClosure {
- public:
-  void do_object(oop obj) {
-    if (obj->is_klass()) {
-      Klass* k = Klass::cast(klassOop(obj));
-      k->set_alloc_count(0);
-      k->set_alloc_size(0);
-    }
-  }
-};
-
-#endif
-
-
 void AllocationProfiler::iterate_since_last_gc() {
   if (is_active()) {
     AllocProfClosure blk;
@@ -82,20 +65,20 @@
 }
 
 
-void AllocationProfiler::add_class_to_array(klassOop k) {
+void AllocationProfiler::add_class_to_array(Klass* k) {
   _print_array->append(k);
 }
 
 
-void AllocationProfiler::add_classes_to_array(klassOop k) {
+void AllocationProfiler::add_classes_to_array(Klass* k) {
   // Iterate over klass and all array klasses for klass
-  k->klass_part()->with_array_klasses_do(&AllocationProfiler::add_class_to_array);
+  k->with_array_klasses_do(&AllocationProfiler::add_class_to_array);
 }
 
 
-int AllocationProfiler::compare_classes(klassOop* k1, klassOop* k2) {
+int AllocationProfiler::compare_classes(Klass** k1, Klass** k2) {
   // Sort by total allocation size
-  return (*k2)->klass_part()->alloc_size() - (*k1)->klass_part()->alloc_size();
+  return (*k2)->alloc_size() - (*k1)->alloc_size();
 }
 
 
@@ -113,14 +96,14 @@
   size_t total_alloc_size = 0;
   int total_alloc_count = 0;
   for (int index = 0; index < _print_array->length(); index++) {
-    klassOop k = _print_array->at(index);
-    size_t alloc_size = k->klass_part()->alloc_size();
+    Klass* k = _print_array->at(index);
+    size_t alloc_size = k->alloc_size();
     if (alloc_size > cutoff) {
-      int alloc_count = k->klass_part()->alloc_count();
+      int alloc_count = k->alloc_count();
 #ifdef PRODUCT
-      const char* name = k->klass_part()->external_name();
+      const char* name = k->external_name();
 #else
-      const char* name = k->klass_part()->internal_name();
+      const char* name = k->internal_name();
 #endif
       tty->print_cr("%20u %10u %8u  %s",
         alloc_size * BytesPerWord,
@@ -130,6 +113,8 @@
       total_alloc_size += alloc_size;
       total_alloc_count += alloc_count;
     }
+    k->set_alloc_count(0);
+    k->set_alloc_size(0);
   }
   tty->print_cr("%20u %10u %8u  --total--",
     total_alloc_size * BytesPerWord,
@@ -148,32 +133,11 @@
   tty->cr();
 
   // Print regular instance klasses and basic type array klasses
-  _print_array = new GrowableArray<klassOop>(SystemDictionary::number_of_classes()*2);
+  _print_array = new GrowableArray<Klass*>(SystemDictionary::number_of_classes()*2);
   SystemDictionary::classes_do(&add_classes_to_array);
   Universe::basic_type_classes_do(&add_classes_to_array);
   sort_and_print_array(cutoff);
 
-  #ifndef PRODUCT
-  tty->print_cr("Allocation profile for system classes (sizes in bytes, cutoff = %d bytes):", cutoff * BytesPerWord);
-  tty->cr();
-
-  // Print system klasses (methods, symbols, constant pools, etc.)
-  _print_array = new GrowableArray<klassOop>(64);
-  Universe::system_classes_do(&add_classes_to_array);
-  sort_and_print_array(cutoff);
-
-  tty->print_cr("Permanent generation dump (sizes in bytes, cutoff = %d bytes):", cutoff * BytesPerWord);
-  tty->cr();
-
-  AllocProfResetClosure resetblk;
-  Universe::heap()->permanent_object_iterate(&resetblk);
-  AllocProfClosure blk;
-  Universe::heap()->permanent_object_iterate(&blk);
-
-  _print_array = new GrowableArray<klassOop>(SystemDictionary::number_of_classes()*2);
-  SystemDictionary::classes_do(&add_classes_to_array);
-  Universe::basic_type_classes_do(&add_classes_to_array);
-  Universe::system_classes_do(&add_classes_to_array);
-  sort_and_print_array(cutoff);
-  #endif
+  // This used to print metadata in the permgen but since there isn't a permgen
+  // anymore, it is not yet implemented.
 }