src/share/vm/runtime/java.cpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File
hotspot Cdiff src/share/vm/runtime/java.cpp
src/share/vm/runtime/java.cpp
Print this page
rev 6132 : 8037970: make PrintMethodData a diagnostic options
Summary: make PrintMethodData a diagnostic options for performance investigation
Reviewed-by:
*** 96,120 ****
#include "opto/indexSet.hpp"
#include "opto/runtime.hpp"
#endif
! #ifndef PRODUCT
!
! // Statistics printing (method invocation histogram)
!
! GrowableArray<Method*>* collected_invoked_methods;
! void collect_invoked_methods(Method* m) {
! if (m->invocation_count() + m->compiled_invocation_count() >= 1 ) {
! collected_invoked_methods->push(m);
! }
}
-
- GrowableArray<Method*>* collected_profiled_methods;
-
void collect_profiled_methods(Method* m) {
Thread* thread = Thread::current();
// This HandleMark prevents a huge amount of handles from being added
// to the metadata_handles() array on the thread.
HandleMark hm(thread);
--- 96,113 ----
#include "opto/indexSet.hpp"
#include "opto/runtime.hpp"
#endif
! GrowableArray<Method*>* collected_profiled_methods;
! int compare_methods(Method** a, Method** b) {
! // %%% there can be 32-bit overflow here
! return ((*b)->invocation_count() + (*b)->compiled_invocation_count())
! - ((*a)->invocation_count() + (*a)->compiled_invocation_count());
}
void collect_profiled_methods(Method* m) {
Thread* thread = Thread::current();
// This HandleMark prevents a huge amount of handles from being added
// to the metadata_handles() array on the thread.
HandleMark hm(thread);
*** 123,140 ****
(PrintMethodData || CompilerOracle::should_print(mh))) {
collected_profiled_methods->push(m);
}
}
! int compare_methods(Method** a, Method** b) {
! // %%% there can be 32-bit overflow here
! return ((*b)->invocation_count() + (*b)->compiled_invocation_count())
! - ((*a)->invocation_count() + (*a)->compiled_invocation_count());
}
void print_method_invocation_histogram() {
ResourceMark rm;
HandleMark hm;
collected_invoked_methods = new GrowableArray<Method*>(1024);
SystemDictionary::methods_do(collect_invoked_methods);
--- 116,173 ----
(PrintMethodData || CompilerOracle::should_print(mh))) {
collected_profiled_methods->push(m);
}
}
+ void print_method_profiling_data() {
+ if (ProfileInterpreter COMPILER1_PRESENT(|| C1UpdateMethodData)) {
+ ResourceMark rm;
+ HandleMark hm;
+ collected_profiled_methods = new GrowableArray<Method*>(1024);
+ ClassLoaderDataGraph::methods_do(collect_profiled_methods);
+ collected_profiled_methods->sort(&compare_methods);
! int count = collected_profiled_methods->length();
! int total_size = 0;
! if (count > 0) {
! for (int index = 0; index < count; index++) {
! Method* m = collected_profiled_methods->at(index);
! ttyLocker ttyl;
! tty->print_cr("------------------------------------------------------------------------");
! m->print_invocation_count();
! tty->print_cr(" mdo size: %d bytes", m->method_data()->size_in_bytes());
! tty->cr();
! // Dump data on parameters if any
! if (m->method_data() != NULL && m->method_data()->parameters_type_data() != NULL) {
! tty->fill_to(2);
! m->method_data()->parameters_type_data()->print_data_on(tty);
! }
! m->print_codes();
! total_size += m->method_data()->size_in_bytes();
! }
! tty->print_cr("------------------------------------------------------------------------");
! tty->print_cr("Total MDO size: %d bytes", total_size);
! }
! }
! }
!
!
! #ifndef PRODUCT
!
! // Statistics printing (method invocation histogram)
!
! GrowableArray<Method*>* collected_invoked_methods;
!
! void collect_invoked_methods(Method* m) {
! if (m->invocation_count() + m->compiled_invocation_count() >= 1 ) {
! collected_invoked_methods->push(m);
! }
}
+
+
void print_method_invocation_histogram() {
ResourceMark rm;
HandleMark hm;
collected_invoked_methods = new GrowableArray<Method*>(1024);
SystemDictionary::methods_do(collect_invoked_methods);
*** 171,211 ****
tty->print_cr("\t%9d (%4.1f%%) accessor", acces_total, 100.0 * acces_total / total);
tty->cr();
SharedRuntime::print_call_statistics(comp_total);
}
- void print_method_profiling_data() {
- ResourceMark rm;
- HandleMark hm;
- collected_profiled_methods = new GrowableArray<Method*>(1024);
- SystemDictionary::methods_do(collect_profiled_methods);
- collected_profiled_methods->sort(&compare_methods);
-
- int count = collected_profiled_methods->length();
- int total_size = 0;
- if (count > 0) {
- for (int index = 0; index < count; index++) {
- Method* m = collected_profiled_methods->at(index);
- ttyLocker ttyl;
- tty->print_cr("------------------------------------------------------------------------");
- //m->print_name(tty);
- m->print_invocation_count();
- tty->print_cr(" mdo size: %d bytes", m->method_data()->size_in_bytes());
- tty->cr();
- // Dump data on parameters if any
- if (m->method_data() != NULL && m->method_data()->parameters_type_data() != NULL) {
- tty->fill_to(2);
- m->method_data()->parameters_type_data()->print_data_on(tty);
- }
- m->print_codes();
- total_size += m->method_data()->size_in_bytes();
- }
- tty->print_cr("------------------------------------------------------------------------");
- tty->print_cr("Total MDO size: %d bytes", total_size);
- }
- }
-
void print_bytecode_count() {
if (CountBytecodes || TraceBytecodes || StopInterpreterAt) {
tty->print_cr("[BytecodeCounter::counter_value = %d]", BytecodeCounter::counter_value());
}
}
--- 204,213 ----
*** 279,291 ****
#endif // ASSERT
#endif // COMPILER2
if (CountCompiledCalls) {
print_method_invocation_histogram();
}
! if (ProfileInterpreter COMPILER1_PRESENT(|| C1UpdateMethodData)) {
print_method_profiling_data();
! }
if (TimeCompiler) {
COMPILER2_PRESENT(Compile::print_timers();)
}
if (TimeCompilationPolicy) {
CompilationPolicy::policy()->print_time();
--- 281,293 ----
#endif // ASSERT
#endif // COMPILER2
if (CountCompiledCalls) {
print_method_invocation_histogram();
}
!
print_method_profiling_data();
!
if (TimeCompiler) {
COMPILER2_PRESENT(Compile::print_timers();)
}
if (TimeCompilationPolicy) {
CompilationPolicy::policy()->print_time();
*** 371,380 ****
--- 373,386 ----
#else // PRODUCT MODE STATISTICS
void print_statistics() {
+ if (PrintMethodData) {
+ print_method_profiling_data();
+ }
+
if (CITime) {
CompileBroker::print_times();
}
if (PrintCodeCache) {
src/share/vm/runtime/java.cpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File