* src/vm/javaobjects.cpp (java_lang_management_MemoryUsage): Added new
authorMichael Starzinger <michi@complang.tuwien.ac.at>
Thu, 24 Sep 2009 14:56:02 +0000 (16:56 +0200)
committerMichael Starzinger <michi@complang.tuwien.ac.at>
Thu, 24 Sep 2009 14:56:02 +0000 (16:56 +0200)
constructor for MemoryUsage objects.
* src/vm/javaobjects.hpp (java_lang_management_MemoryUsage): Added accessor.
* src/native/vm/gnuclasspath/gnu_java_lang_management_VMClassLoadingMXBeanImpl.cpp,
* src/native/vm/gnuclasspath/gnu_java_lang_management_VMMemoryMXBeanImpl.cpp:
Fixed broken methods and use above invocation wrapper now.

src/native/vm/gnuclasspath/gnu_java_lang_management_VMClassLoadingMXBeanImpl.cpp
src/native/vm/gnuclasspath/gnu_java_lang_management_VMMemoryMXBeanImpl.cpp
src/vm/javaobjects.cpp
src/vm/javaobjects.hpp

index c00c3e9a45402de02189d21b77698ece61da2cfd..edf439da894b15bf71518e41a7f46850f72738e5 100644 (file)
@@ -39,6 +39,7 @@
 #include "toolbox/logging.hpp"
 
 #include "vm/classcache.hpp"
+#include "vm/options.h"
 #include "vm/utf8.h"
 #include "vm/vm.hpp"
 
@@ -68,9 +69,12 @@ JNIEXPORT jint JNICALL Java_gnu_java_lang_management_VMClassLoadingMXBeanImpl_ge
  */
 JNIEXPORT jlong JNICALL Java_gnu_java_lang_management_VMClassLoadingMXBeanImpl_getUnloadedClassCount(JNIEnv *env, jclass clazz)
 {
-       log_println("Java_gnu_java_lang_management_VMClassLoadingMXBeanImpl_getUnloadedClassCount: IMPLEMENT ME!");
+       int32_t count;
+
+       // XXX Fix this once we support class unloading!
+       count = 0;
 
-       return 0;
+       return count;
 }
 
 
@@ -81,10 +85,7 @@ JNIEXPORT jlong JNICALL Java_gnu_java_lang_management_VMClassLoadingMXBeanImpl_g
  */
 JNIEXPORT jboolean JNICALL Java_gnu_java_lang_management_VMClassLoadingMXBeanImpl_isVerbose(JNIEnv *env, jclass clazz)
 {
-/*     return _Jv_jvm->Java_gnu_java_lang_management_VMClassLoadingMXBeanImpl_verbose; */
-#warning Move to C++
-       log_println("Java_gnu_java_lang_management_VMClassLoadingMXBeanImpl_isVerbose: MOVE TO C++!");
-       return 0;
+       return opt_verboseclass;
 }
 
 
@@ -95,9 +96,7 @@ JNIEXPORT jboolean JNICALL Java_gnu_java_lang_management_VMClassLoadingMXBeanImp
  */
 JNIEXPORT void JNICALL Java_gnu_java_lang_management_VMClassLoadingMXBeanImpl_setVerbose(JNIEnv *env, jclass clazz, jboolean verbose)
 {
-/*     _Jv_jvm->Java_gnu_java_lang_management_VMClassLoadingMXBeanImpl_verbose = verbose; */
-#warning Move to C++
-       log_println("Java_gnu_java_lang_management_VMClassLoadingMXBeanImpl_setVerbose: MOVE TO C++!");
+       opt_verboseclass = verbose;
 }
 
 } // extern "C"
index 96a848d11eae6c1da2c5f4bc0819ee24fa61c631..55952ab6864006874e2dab40d1a7179125ed0773 100644 (file)
 # include "native/vm/include/gnu_java_lang_management_VMMemoryMXBeanImpl.h"
 #endif
 
-#include "vm/jit/builtin.hpp"
 #include "vm/class.hpp"
 #include "vm/global.h"
-#include "vm/loader.hpp"               /* XXX only for load_class_bootstrap */
+#include "vm/javaobjects.hpp"
 #include "vm/options.h"
 #include "vm/vm.hpp"
 
@@ -54,50 +53,17 @@ extern "C" {
  */
 JNIEXPORT jobject JNICALL Java_gnu_java_lang_management_VMMemoryMXBeanImpl_getHeapMemoryUsage(JNIEnv *env, jclass clazz)
 {
-       classinfo     *class_java_lang_management_MemoryUsage;
-       java_handle_t *o;
-       methodinfo    *m;
-       int64_t        init;
-       int64_t        used;
-       int64_t        commited;
-       int64_t        maximum;
+       // Get values from the VM.
+       // XXX If we ever support more than one VM, change this.
+       int64_t init     = opt_heapstartsize;
+       int64_t used     = gc_get_total_bytes();
+       int64_t commited = gc_get_heap_size();
+       int64_t maximum  = gc_get_max_heap_size();
 
-       /* get the class */
-       /* XXX optimize me! sometime... */
+       // Construct a new java.lang.management.MemoryUsage object.
+       java_lang_management_MemoryUsage jlmmu(init, used, commited, maximum);
 
-       if (!(class_java_lang_management_MemoryUsage = load_class_bootstrap(utf_new_char("java/lang/management/MemoryUsage"))))
-               return false;
-
-       /* create the object */
-
-       o = builtin_new(class_java_lang_management_MemoryUsage);
-       
-       if (o == NULL)
-               return NULL;
-
-       /* find initializer */
-
-       m = class_findmethod(class_java_lang_management_MemoryUsage,
-                                                utf_init, utf_new_char("(JJJJ)V"));
-                                                     
-       /* initializer not found */
-
-       if (m == NULL)
-               return NULL;
-
-       /* get values from the VM */
-       /* XXX if we ever support more than one VM, change this */
-
-       init     = opt_heapstartsize;
-       used     = gc_get_total_bytes();
-       commited = gc_get_heap_size();
-       maximum  = gc_get_max_heap_size();
-
-       /* call initializer */
-
-       (void) vm_call_method(m, o, init, used, commited, maximum);
-
-       return (jobject) o;
+       return jlmmu.get_handle();
 }
 
 
@@ -134,10 +100,7 @@ JNIEXPORT jint JNICALL Java_gnu_java_lang_management_VMMemoryMXBeanImpl_getObjec
  */
 JNIEXPORT jboolean JNICALL Java_gnu_java_lang_management_VMMemoryMXBeanImpl_isVerbose(JNIEnv *env, jclass clazz)
 {
-/*     return _Jv_jvm->Java_gnu_java_lang_management_VMMemoryMXBeanImpl_verbose; */
-#warning Move to C++
-       log_println("Java_gnu_java_lang_management_VMMemoryMXBeanImpl_isVerbose: MOVE TO C++!");
-       return 0;
+       return opt_verbosegc;
 }
 
 
@@ -148,9 +111,7 @@ JNIEXPORT jboolean JNICALL Java_gnu_java_lang_management_VMMemoryMXBeanImpl_isVe
  */
 JNIEXPORT void JNICALL Java_gnu_java_lang_management_VMMemoryMXBeanImpl_setVerbose(JNIEnv *env, jclass clazz, jboolean verbose)
 {
-/*     _Jv_jvm->Java_gnu_java_lang_management_VMMemoryMXBeanImpl_verbose = verbose; */
-#warning Move to C++
-       log_println("Java_gnu_java_lang_management_VMMemoryMXBeanImpl_setVerbose: MOVE TO C++!");
+       opt_verbosegc = verbose;
 }
 
 } // extern "C"
index 901756534cd4441f25d5f03a5e2b7e706f402e52..2bd0a19ddd81ea35dd496ab2af783328283015b8 100644 (file)
@@ -74,6 +74,38 @@ java_handle_t* java_lang_ClassLoader::invoke_getSystemClassLoader()
 }
 
 
+/**
+ * Constructs a new instance of the class by calling the
+ * appropriate Java initializer.
+ */
+java_lang_management_MemoryUsage::java_lang_management_MemoryUsage(int64_t init, int64_t used, int64_t commited, int64_t maximum)
+{
+       // Load the class.
+       // XXX Maybe this should be made global at some points.
+       classinfo* class_java_lang_management_MemoryUsage;
+       if (!(class_java_lang_management_MemoryUsage = load_class_bootstrap(utf_new_char("java/lang/management/MemoryUsage"))))
+               return;
+
+       // Find the appropriate initializer.
+       // XXX Maybe this should be made global at some points.
+       methodinfo* m = class_findmethod(class_java_lang_management_MemoryUsage,
+                                                                        utf_init,
+                                                                        utf_new_char("(JJJJ)V"));
+
+       if (m == NULL)
+               return;
+
+       // Instantiate a new object.
+       _handle = builtin_new(class_java_lang_management_MemoryUsage);
+
+       if (is_null())
+               return;
+
+       // Call initializer.
+       (void) vm_call_method(m, _handle, init, used, commited, maximum);
+}
+
+
 /**
  * Constructs a Java object with the given
  * java.lang.reflect.Constructor.
index 71f58abb11147bfe1de4996a6df396331f529237..199fa8b612ebbb9cc17520f9e29a7230d226ef91 100644 (file)
@@ -509,6 +509,21 @@ inline void java_lang_Double::set_value(double value)
 
 #if defined(ENABLE_JAVASE)
 
+/**
+ * java/lang/management/MemoryUsage
+ *
+ * Object layout:
+ *
+ * 0. object header
+ * [other fields are not used]
+ */
+class java_lang_management_MemoryUsage : public java_lang_Object, private FieldAccess {
+public:
+       java_lang_management_MemoryUsage(java_handle_t* h) : java_lang_Object(h) {}
+       java_lang_management_MemoryUsage(int64_t init, int64_t used, int64_t commited, int64_t maximum);
+};
+
+
 # if defined(ENABLE_ANNOTATIONS)
 /**
  * OpenJDK sun/reflect/ConstantPool