in vm/vmcore/src/util/vm_stats.cpp [568:815]
void VM_Statistics::print()
{
Global_Env *env = VM_Global_State::loader_env;
if(!vm_print_total_stats)
return;
printf("\n==== begin VM statistics\n");
print_classes();
if(vm_print_total_stats_level > 2) {
print_methods();
}
// Gregory -
// Code moved to EM, no longer accessible through standard interface
// env->vm_methods->print_stats();
printf("%11" FMT64 "u ::::Number of native methods\n", num_native_methods);
printf("%11" FMT64 "u ::::Number of Java methods\n", num_java_methods);
printf("%11" FMT64 "u ::::Total exceptions thrown\n", num_exceptions);
printf("%11" FMT64 "u :::: exc obj was dead\n", num_exceptions_dead_object);
printf("%11" FMT64 "u :::: exc obj wasn't created\n", num_exceptions_object_not_created);
printf("%11" FMT64 "u :::: caught in the same frame\n", num_exceptions_caught_same_frame);
printf("%11" FMT64 "u :::: calls to array_index_throw\n", num_array_index_throw);
printf("%11" FMT64 "u ::::Number fillInStackTrace\n", num_fill_in_stack_trace);
printf("%11" FMT64 "u ::::Max stack trace depth\n", max_stack_trace);
if (num_fill_in_stack_trace != 0)
printf("%11.2f ::::Avg stack trace depth\n", (double)(int64)total_stack_trace_depth / (double)(int64)num_fill_in_stack_trace);
printf("%11" FMT64 "u ::::Unwinds (GC) java frames\n", num_unwind_java_frames_gc);
printf("%11" FMT64 "u :::: native frames\n", num_unwind_native_frames_gc);
printf("%11" FMT64 "u :::: total\n", num_unwind_java_frames_gc + num_unwind_native_frames_gc);
printf("%11" FMT64 "u ::::Unwinds (non-GC) java frames\n", num_unwind_java_frames_non_gc);
printf("%11" FMT64 "u :::: native frames\n", (num_unwind_native_frames_all - num_unwind_native_frames_gc));
printf("%11" FMT64 "u :::: total\n", num_unwind_java_frames_non_gc + (num_unwind_native_frames_all - num_unwind_native_frames_gc));
printf("%11" FMT64 "u :::: Optimistic depth success\n", num_optimistic_depth_success);
printf("%11" FMT64 "u :::: failure\n", num_optimistic_depth_failure);
printf("%11" FMT64 "u ::::Method lookup cache hit\n", num_method_lookup_cache_hit);
printf("%11" FMT64 "u :::: miss\n", num_method_lookup_cache_miss);
printf("%11" FMT64 "u ::::Type checks\n", num_type_checks);
printf("%11" FMT64 "u :::: Equal types\n", num_type_checks_equal_type);
printf("%11" FMT64 "u :::: Fast type check\n", num_type_checks_fast_decision);
printf("%11" FMT64 "u :::: Superclass is array type\n", num_type_checks_super_is_array);
printf("%11" FMT64 "u :::: Superclass is interface type\n", num_type_checks_super_is_interface);
printf("%11" FMT64 "u :::: Superclass depth >%d\n", num_type_checks_super_is_too_deep, vm_max_fast_instanceof_depth());
printf("%11" FMT64 "u ::::Instanceof calls\n", num_instanceof);
printf("%11" FMT64 "u :::: Equal types\n", num_instanceof_equal_type);
printf("%11" FMT64 "u :::: Fast type check\n", num_instanceof_fast_decision);
printf("%11" FMT64 "u :::: Null object\n", num_instanceof_null);
printf("%11" FMT64 "u ::::Checkcast calls\n", num_checkcast);
printf("%11" FMT64 "u :::: Equal types\n", num_checkcast_equal_type);
printf("%11" FMT64 "u :::: Fast type check\n", num_checkcast_fast_decision);
printf("%11" FMT64 "u :::: Null object\n", num_checkcast_null);
printf("%11" FMT64 "u ::::Aastore calls\n", num_aastore);
printf("%11" FMT64 "u :::: Equal types\n", num_aastore_equal_type);
printf("%11" FMT64 "u :::: Fast type check\n", num_aastore_fast_decision);
printf("%11" FMT64 "u :::: Null object\n", num_aastore_null);
printf("%11" FMT64 "u :::: Into Object[] array\n", num_aastore_object_array);
printf("%11" FMT64 "u ::::Aastore_test calls\n", num_aastore_test);
printf("%11" FMT64 "u :::: Equal types\n", num_aastore_test_equal_type);
printf("%11" FMT64 "u :::: Fast type check\n", num_aastore_test_fast_decision);
printf("%11" FMT64 "u :::: Null object\n", num_aastore_test_null);
printf("%11" FMT64 "u :::: Into Object[] array\n", num_aastore_test_object_array);
printf("%11" FMT64 "u ::::Number of invokeinterface\n", num_invokeinterface_calls);
printf("%11" FMT64 "u :::: max size\n", invokeinterface_calls_size_max);
printf("%11" FMT64 "u :::: max search\n", invokeinterface_calls_searched_max);
printf("%11" FMT64 "u :::: num size 1\n", num_invokeinterface_calls_size_1);
printf("%11" FMT64 "u :::: num search 1\n", num_invokeinterface_calls_searched_1);
printf("%11" FMT64 "u :::: num size 2\n", num_invokeinterface_calls_size_2);
printf("%11" FMT64 "u :::: num search 2\n", num_invokeinterface_calls_searched_2);
printf("%11" FMT64 "u :::: num size +\n", num_invokeinterface_calls_size_many);
printf("%11" FMT64 "u :::: num search +\n", num_invokeinterface_calls_searched_many);
printf("%11" FMT64 "u ::::# instantiate_cp_string_fast\n", num_instantiate_cp_string_fast);
printf("%11" FMT64 "u :::: returned interned\n", num_instantiate_cp_string_fast_returned_interned);
printf("%11" FMT64 "u :::: success long path\n", num_instantiate_cp_string_fast_success_long_path);
printf("%11" FMT64 "u ::::# instantiate_cp_string_slow\n", num_instantiate_cp_string_slow);
printf("%11" FMT64 "u ::::# clss_alloc_new_object_or_nul\n", num_class_alloc_new_object_or_null);
printf("%11" FMT64 "u :::: class_alloc_new_object\n", num_class_alloc_new_object);
printf("%11" FMT64 "u ::::Number of calls to anewarray\n", num_anewarray);
printf("%11" FMT64 "u ::::Number calls to multianewarray\n", num_multianewarray);
printf("%11" FMT64 "u ::::Number of calls to newarray\n", num_newarray);
printf("%11" FMT64 "u ::::Number of calls to newarray fastpath\n", num_newarray_or_null);
if(num_newarray_boolean)
printf("%11" FMT64 "u :::: boolean\n", num_newarray_boolean);
if(num_newarray_byte)
printf("%11" FMT64 "u :::: byte\n", num_newarray_byte);
if(num_newarray_char)
printf("%11" FMT64 "u :::: char\n", num_newarray_char);
if(num_newarray_short)
printf("%11" FMT64 "u :::: short\n", num_newarray_short);
if(num_newarray_int)
printf("%11" FMT64 "u :::: int\n", num_newarray_int);
if(num_newarray_long)
printf("%11" FMT64 "u :::: long\n", num_newarray_long);
if(num_newarray_float)
printf("%11" FMT64 "u :::: float\n", num_newarray_float);
if(num_newarray_double)
printf("%11" FMT64 "u :::: double\n", num_newarray_double);
printf("%11" FMT64 "u ::::# checks if class initialized\n", num_is_class_initialized);
printf("%11" FMT64 "u ::::# get ljf addr\n", num_get_addr_of_vm_last_java_frame);
printf("%11" FMT64 "u ::::# local JNI handles\n", num_local_jni_handles);
printf("%11" FMT64 "u ::::Number of f2i\n", num_f2i);
printf("%11" FMT64 "u :::: f2l\n", num_f2l);
printf("%11" FMT64 "u :::: d2i\n", num_d2i);
printf("%11" FMT64 "u :::: d2l\n", num_d2l);
printf("\n");
printf("%11" FMT64 "u ::::Number of arraycopy(byte)\n", num_arraycopy_byte);
printf("%11" FMT64 "u ::::Number of arraycopy(char)\n", num_arraycopy_char);
printf("%11" FMT64 "u ::::Number of arraycopy(bool)\n", num_arraycopy_bool);
printf("%11" FMT64 "u ::::Number of arraycopy(short)\n", num_arraycopy_short);
printf("%11" FMT64 "u ::::Number of arraycopy(int)\n", num_arraycopy_int);
printf("%11" FMT64 "u ::::Number of arraycopy(long)\n", num_arraycopy_long);
printf("%11" FMT64 "u ::::Number of arraycopy(float)\n", num_arraycopy_float);
printf("%11" FMT64 "u ::::Number of arraycopy(double)\n", num_arraycopy_double);
printf("%11" FMT64 "u ::::Number of arraycopy(object)\n", num_arraycopy_object);
printf("%11" FMT64 "u :::: same element types\n", num_arraycopy_object_same_type);
printf("%11" FMT64 "u :::: different element types\n", num_arraycopy_object_different_type);
printf("\n");
printf("%11" FMT64 "u ::::Number of char arraycopies\n", num_char_arraycopies);
printf("%11" FMT64 "u :::: same array copies\n", num_same_array_char_arraycopies);
printf("%11" FMT64 "u :::: zero src offset copies\n", num_zero_src_offset_char_arraycopies);
printf("%11" FMT64 "u :::: zero dst offset copies\n", num_zero_dst_offset_char_arraycopies);
printf("%11" FMT64 "u :::: both 8 byte aligned copies\n", num_aligned_char_arraycopies);
printf("%11" FMT64 "u :::: fast uint64 copies\n", num_fast_char_arraycopies);
if (num_char_arraycopies > 0) {
printf("%11" FMT64 "u :::: average copy length in Chars\n", (total_char_arraycopy_length / num_char_arraycopies));
printf("%11" FMT64 "u :::: average copy length in bytes\n", 2*(total_char_arraycopy_length / num_char_arraycopies));
}
if (total_fast_char_arraycopy_uint64_copies > 0) {
printf("%11" FMT64 "u :::: average fast uint64 copies\n", (total_fast_char_arraycopy_uint64_copies / num_fast_char_arraycopies));
}
if (num_char_arraycopies > 0) {
print_array_distribution("Char arraycopy lengths", char_arraycopy_count);
}
if (total_fast_char_arraycopy_uint64_copies > 0) {
print_array_distribution("Fast char arraycopy uint64 copies", char_arraycopy_uint64_copies);
}
printf("\n");
#ifdef _DEBUG
printf("%11" FMT64 "u ::::Number of lazy monenter\n", num_lazy_monitor_enter);
printf("%11" FMT64 "u ::::Number of lazy monexit\n", num_lazy_monitor_exit);
#endif
// 20030114 New monitor enter/exit statistics
printf("%11" FMT64 "u ::::Number of monenter\n", num_monitor_enter);
printf("%11" FMT64 "u :::: monenter (null check)\n", num_monitor_enter_null_check);
printf("%11" FMT64 "u :::: monenter (is null)\n", num_monitor_enter_is_null);
printf("%11" FMT64 "u :::: monenter (fastcall)\n", num_monitor_enter_fastcall);
printf("\n");
printf("%11" FMT64 "u :::: monexit\n", num_monitor_exit);
printf("%11" FMT64 "u :::: monenter (null check)\n", num_monitor_exit_null_check);
printf("%11" FMT64 "u :::: monexit (is null)\n", num_monitor_exit_is_null);
printf("%11" FMT64 "u :::: monexit (unowned obj)\n", num_monitor_exit_unowned_object);
printf("%11" FMT64 "u :::: monexit (fastestcall)\n", num_monitor_exit_fastestcall);
printf("%11" FMT64 "u :::: monexit (fastcall)\n", num_monitor_exit_fastcall);
printf("%11" FMT64 "u :::: monexit (decr rec ct)\n", num_monitor_exit_decr_rec_count);
printf("%11" FMT64 "u :::: monexit (very slow)\n", num_monitor_exit_very_slow_path);
printf("%11" FMT64 "u ::::Number of monenter\n", num_monitor_enter);
printf("%11" FMT64 "u ::::Number of monenter waits\n", num_monitor_enter_wait);
printf("%11" FMT64 "u ::::Number of monenter sleeps\n", num_sleep_monitor_enter);
printf("%11" FMT64 "u ::::Number of monexit sleeps\n", num_sleep_monitor_exit);
printf("%11" FMT64 "u ::::Number of NotifyAll sleeps\n", num_sleep_notify_all);
printf("%11" FMT64 "u ::::Number of Sleep sleeps\n", num_sleep_notify);
printf("%11" FMT64 "u ::::Number of interrupt wait sleeps\n", num_sleep_interrupt_the_wait);
printf("%11" FMT64 "u ::::Number of wait sleeps\n", num_sleep_wait);
printf("%11" FMT64 "u ::::Number of Java yield sleeps\n", num_sleep_java_thread_yield);
printf("%11" FMT64 "u ::::Number of wait for object\n", num_wait_WaitForSingleObject);
printf("%11" FMT64 "u ::::Number of hashcode sleeps\n", num_sleep_hashcode);
printf("%11" FMT64 "u ::::Number of mon owner sleeps\n", num_sleep_monitor_ownership);
// Print total number of allocations and total number of bytes
// for class-related data structures.
printf("\nAllocations of storage for statics:\n");
printf("%11d ::::number allocated\n", num_statics_allocations);
printf("%11d ::::number nonempty allocated\n", num_nonempty_statics_allocations);
printf("%11d ::::bytes allocated\n", total_statics_bytes);
fflush(stdout);
printf("\nAllocations of storage for vtables:\n");
printf("%11d ::::number allocated\n", num_vtable_allocations);
printf("%11d ::::bytes allocated\n", total_vtable_bytes);
printf("\n");
printf("%11" FMT64 "u ::::# times free_local_handle_2 was called\n", num_free_local_called);
printf("%11" FMT64 "u ::::# times free_local_handle_2 was called and freed something\n", num_free_local_called_free);
printf("%11" FMT64 "u ::::# jni handles freed\n", num_jni_handles_freed);
printf("%11" FMT64 "u ::::# jni refs wasted\n", num_jni_handles_wasted_refs);
printf("\n");
printf("%11" FMT64 "u ::::JNI stub bytes allocated\n", jni_stub_bytes);
printf("%11" FMT64 "u ::::# calls to thread_enable_suspend\n", num_thread_enable_suspend);
printf("%11" FMT64 "u ::::# calls to thread_disable_suspend\n", num_thread_disable_suspend);
printf("%11" FMT64 "u ::::# managed to unmanaged null conversions attempted\n", num_convert_null_m2u);
printf("%11" FMT64 "u ::::# unmanaged to managed null conversions attempted\n", num_convert_null_u2m);
printf("\n");
printf("%11" FMT64 "u ::::lockres_enter\n", lockres_enter);
printf("%11" FMT64 "u ::::lockres_exit\n", lockres_exit);
printf("%11" FMT64 "u ::::lockres_enter_nonnull\n", lockres_enter_nonnull);
printf("%11" FMT64 "u ::::lockres_exit_nonnull\n", lockres_exit_nonnull);
printf("%11" FMT64 "u ::::lockres_enter_static\n", lockres_enter_static);
printf("%11" FMT64 "u ::::lockres_exit_static\n", lockres_exit_static);
printf("%11" FMT64 "u ::::lockres_enter_C\n", lockres_enter_C);
printf("%11" FMT64 "u ::::lockres_exit_C\n", lockres_exit_C);
printf("%11" FMT64 "u ::::lockres_fastest_enter\n", lockres_fastest_enter);
printf("%11" FMT64 "u ::::lockres_fastest_exit\n", lockres_fastest_exit);
printf("%11" FMT64 "u ::::lockres_enter_anon_reserved\n", lockres_enter_anon_reserved);
printf("%11" FMT64 "u ::::lockres_unreserves\n", lockres_unreserves);
printf("%11" FMT64 "u ::::lockres_rollbacks\n", lockres_rollbacks);
printf("%11" FMT64 "u ::::lockres_slow_reserved_enter\n", lockres_slow_reserved_enter);
printf("%11" FMT64 "u ::::lockres_slow_reserved_exit\n", lockres_slow_reserved_exit);
printf("%11" FMT64 "u ::::lockres_unreserved_enter\n", lockres_unreserved_enter);
printf("%11" FMT64 "u ::::lockres_unreserved_exit\n", lockres_unreserved_exit);
printf("\n");
printf("%11" FMT64 "u ::::num_compileme_generated\n", num_compileme_generated);
printf("%11" FMT64 "u ::::num_compileme_used\n", num_compileme_used);
printf("\n");
printf("Use_large_pages = %s\n", (VM_Global_State::loader_env->use_large_pages? "yes" : "no"));
printf("%11" FMT64 "u ::::number_memoryblock_allocations\n", number_memoryblock_allocations);
printf("%11" FMT64 "u ::::total_memory_allocated\n", total_memory_allocated);
printf("%11" FMT64 "u ::::total_memory_used\n", total_memory_used);
printf("%11" FMT64 "u ::::number_memorymanager_created\n", number_memorymanager_created);
print_rt_function_stats();
print_string_pool_stats();
printf("==== end VM statistics\n");
fflush(stdout);
} //VM_Statistics::print