--- 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.
}