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