void VM_Statistics::print()

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