Index: vm/vmcore/include/environment.h =================================================================== --- vm/vmcore/include/environment.h (revision 522468) +++ vm/vmcore/include/environment.h (working copy) @@ -248,6 +248,21 @@ apr_time_t total_compilation_time; /** + * Total loaded class count + */ + unsigned total_loaded_class_count; + + /** + * Total unloaded class count + */ + unsigned unloaded_class_count; + + /** + * Total unloaded class count + */ + jboolean class_loading_verbose; + + /** * The VM state. See VM_STATE enum above. */ volatile int vm_state; Index: vm/vmcore/src/jni/jni.cpp =================================================================== --- vm/vmcore/src/jni/jni.cpp (revision 522468) +++ vm/vmcore/src/jni/jni.cpp (working copy) @@ -487,7 +487,6 @@ } vm_env->start_time = apr_time_now()/1000; - vm_env->total_compilation_time = 0; java_vm->functions = &java_vm_vtable; java_vm->pool = vm_global_pool; Index: vm/vmcore/src/kernel_classes/native/org_apache_harmony_lang_management_ClassLoadingMXBeanImpl.cpp =================================================================== --- vm/vmcore/src/kernel_classes/native/org_apache_harmony_lang_management_ClassLoadingMXBeanImpl.cpp (revision 522468) +++ vm/vmcore/src/kernel_classes/native/org_apache_harmony_lang_management_ClassLoadingMXBeanImpl.cpp (working copy) @@ -28,6 +28,7 @@ */ #include +#include "environment.h" #include "org_apache_harmony_lang_management_ClassLoadingMXBeanImpl.h" /* * Class: org_apache_harmony_lang_management_ClassLoadingMXBeanImpl @@ -35,12 +36,13 @@ * Signature: ()I */ JNIEXPORT jint JNICALL Java_org_apache_harmony_lang_management_ClassLoadingMXBeanImpl_getLoadedClassCountImpl -(JNIEnv *, jobject) +(JNIEnv * env, jobject this_bean) { - // TODO implement this method stub correctly - TRACE2("management","getLoadedClassCountImpl stub invocation"); - return 1<<3; -}; + TRACE2("management", "ClassLoadingMXBeanImpl_getLoadedClassCountImpl invocation"); + return (jint) + (Java_org_apache_harmony_lang_management_ClassLoadingMXBeanImpl_getTotalLoadedClassCountImpl(env, this_bean) + - Java_org_apache_harmony_lang_management_ClassLoadingMXBeanImpl_getUnloadedClassCountImpl(env, this_bean)); +} /* * Class: org_apache_harmony_lang_management_ClassLoadingMXBeanImpl @@ -48,12 +50,13 @@ * Signature: ()J */ JNIEXPORT jlong JNICALL Java_org_apache_harmony_lang_management_ClassLoadingMXBeanImpl_getTotalLoadedClassCountImpl -(JNIEnv *, jobject) +(JNIEnv * env, jobject) { - // TODO implement this method stub correctly - TRACE2("management","getTotalLoadedClassCountImpl stub invocation"); - return 1<<4; -}; + TRACE2("management", "ClassLoadingMXBeanImpl_getTotalLoadedClassCountImpl invocation"); + JavaVM * vm = NULL; + env->GetJavaVM(&vm); + return ((JavaVM_Internal*)vm)->vm_env->total_loaded_class_count; +} /* * Class: org_apache_harmony_lang_management_ClassLoadingMXBeanImpl @@ -61,28 +64,27 @@ * Signature: ()J */ JNIEXPORT jlong JNICALL Java_org_apache_harmony_lang_management_ClassLoadingMXBeanImpl_getUnloadedClassCountImpl -(JNIEnv *, jobject) +(JNIEnv * env, jobject) { - // TODO implement this method stub correctly - TRACE2("management","getUnloadedClassCountImpl stub invocation"); - return 1<<2; -}; + TRACE2("management", "ClassLoadingMXBeanImpl_getUnloadedClassCountImpl invocation"); + JavaVM * vm = NULL; + env->GetJavaVM(&vm); + return ((JavaVM_Internal*)vm)->vm_env->unloaded_class_count; +} -jboolean ClassLoadingVerbose = JNI_FALSE; - - /* * Class: org_apache_harmony_lang_management_ClassLoadingMXBeanImpl * Method: isVerboseImpl * Signature: ()Z */ JNIEXPORT jboolean JNICALL Java_org_apache_harmony_lang_management_ClassLoadingMXBeanImpl_isVerboseImpl -(JNIEnv *, jobject) +(JNIEnv * env, jobject) { - // TODO implement this method stub correctly - TRACE2("management","ClassLoadingMXBeanImpl_isVerboseImpl stub invocation"); - return ClassLoadingVerbose; -}; + TRACE2("management", "ClassLoadingMXBeanImpl_isVerboseImpl invocation"); + JavaVM * vm = NULL; + env->GetJavaVM(&vm); + return ((JavaVM_Internal*)vm)->vm_env->class_loading_verbose; +} /* * Class: org_apache_harmony_lang_management_ClassLoadingMXBeanImpl @@ -90,10 +92,18 @@ * Signature: (Z)V */ JNIEXPORT void JNICALL Java_org_apache_harmony_lang_management_ClassLoadingMXBeanImpl_setVerboseImpl -(JNIEnv *, jobject, jboolean new_value) +(JNIEnv * env, jobject, jboolean new_value) { - // TODO implement this method stub correctly - TRACE2("management","ClassLoadingMXBeanImpl_setVerboseImpl stub invocation"); - ClassLoadingVerbose = new_value; -}; + TRACE2("management", "ClassLoadingMXBeanImpl_setVerboseImpl invocation"); + JavaVM * vm = NULL; + env->GetJavaVM(&vm); + if (((JavaVM_Internal*)vm)->vm_env->class_loading_verbose != new_value) { + if (new_value) { + set_threshold(util::CLASS_LOGGER, INFO); + } else { + set_threshold(util::CLASS_LOGGER, DIE); + } + ((JavaVM_Internal*)vm)->vm_env->class_loading_verbose = new_value; + } +} Index: vm/vmcore/src/class_support/Environment.cpp =================================================================== --- vm/vmcore/src/class_support/Environment.cpp (revision 522468) +++ vm/vmcore/src/class_support/Environment.cpp (working copy) @@ -45,6 +45,10 @@ dcList(NULL), assert_reg(NULL), vm_methods(NULL), +total_loaded_class_count(0), +unloaded_class_count(0), +class_loading_verbose(false), +total_compilation_time(0), bootstrapping(false), ready_for_exceptions(false) { Index: vm/vmcore/src/class_support/classloader.cpp =================================================================== --- vm/vmcore/src/class_support/classloader.cpp (revision 522468) +++ vm/vmcore/src/class_support/classloader.cpp (working copy) @@ -106,7 +106,10 @@ } if (GetLoadedClasses()) + { + VM_Global_State::loader_env->unloaded_class_count += GetLoadedClasses()->GetItemCount(); delete GetLoadedClasses(); + } if (GetLoadingClasses()) delete GetLoadingClasses(); if (GetReportedClasses()) @@ -318,6 +321,7 @@ { jvmti_send_class_load_event(env, clss); } + ++(env->total_loaded_class_count); return clss; }