You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by mc...@apache.org on 2008/03/06 18:39:27 UTC

svn commit: r634360 - in /harmony/enhanced/drlvm/trunk/vm/vmcore: include/ src/class_support/ src/init/ src/jni/ src/kernel_classes/native/ src/util/

Author: mcfirst
Date: Thu Mar  6 09:39:20 2008
New Revision: 634360

URL: http://svn.apache.org/viewvc?rev=634360&view=rev
Log:
Applying the patch from HARMONY-5499 [drlvm][startup] make a number of string hash table buckets configurable

Modified:
    harmony/enhanced/drlvm/trunk/vm/vmcore/include/String_Pool.h
    harmony/enhanced/drlvm/trunk/vm/vmcore/include/environment.h
    harmony/enhanced/drlvm/trunk/vm/vmcore/include/init.h
    harmony/enhanced/drlvm/trunk/vm/vmcore/include/mem_alloc.h
    harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/Environment.cpp
    harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/String_Pool.cpp
    harmony/enhanced/drlvm/trunk/vm/vmcore/src/init/parse_arguments.cpp
    harmony/enhanced/drlvm/trunk/vm/vmcore/src/init/vm_init.cpp
    harmony/enhanced/drlvm/trunk/vm/vmcore/src/init/vm_shutdown.cpp
    harmony/enhanced/drlvm/trunk/vm/vmcore/src/jni/jni.cpp
    harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/native/java_lang_VMExecutionEngine.cpp
    harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/vm_stats.cpp

Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/include/String_Pool.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/include/String_Pool.h?rev=634360&r1=634359&r2=634360&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/include/String_Pool.h (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/include/String_Pool.h Thu Mar  6 09:39:20 2008
@@ -49,7 +49,7 @@
 
 class String_Pool {
 public:
-    String_Pool();
+    String_Pool(size_t st_size);
 
     // lookup string in string table & insert if not found
     String * lookup(const char *str);
@@ -68,8 +68,16 @@
     void lock_pool();
     void unlock_pool();
 
+#ifdef VM_STATS
+    friend class VM_Statistics;
+public:
+    apr_hash_t * string_stat;
+    unsigned num_ambiguity;
+#endif
+
 private:
-    enum { STRING_TABLE_SIZE = 44449, INTERNED_STRING_ARRAY_SIZE = STRING_TABLE_SIZE / 10 };
+    enum { INTERNED_STRING_ARRAY_SIZE = 32768 };
+    size_t string_pool_size;
 
     class Entry {
     public:
@@ -108,10 +116,7 @@
     POINTER_SIZE_INT hash_it(const char * str, size_t len);
     String * lookup(const char *str, size_t len, POINTER_SIZE_INT hash);
     void register_interned_string(String * str);
-    private:
     POINTER_SIZE_INT hash_it_unaligned(const char * str, size_t len);
-    public:
-    
     // memory pool
     tl::MemoryPool      memory_pool;    
     // table of string entries
@@ -130,12 +135,6 @@
     // The protocol is simple and the lock is local to this string pool.
     volatile POINTER_SIZE_INT string_pool_lock; // 1 is locked, 0 is unlocked
 
-#ifdef VM_STATS
-    friend class VM_Statistics;
-public:
-    apr_hash_t * string_stat;
-    unsigned num_ambiguity;
-#endif
 };
 
 #endif // _STRING_POOL_H_

Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/include/environment.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/include/environment.h?rev=634360&r1=634359&r2=634360&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/include/environment.h (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/include/environment.h Thu Mar  6 09:39:20 2008
@@ -323,7 +323,7 @@
     OpenInstanceHandle em_instance;
     OpenEmVmHandle em_interface;
 
-    Global_Env(apr_pool_t * pool);
+    Global_Env(apr_pool_t *pool, size_t string_pool_size);
     ~Global_Env();
 
     void * operator new(size_t size, apr_pool_t * pool) {
@@ -404,5 +404,11 @@
     Properties* m_java_properties;
     Properties* m_vm_properties;
 };
+
+/**
+ * Parses a size string, e. g. <num>, <num>k, <num>m.
+ * @return size in bytes, or 0 if parsing failed
+ */
+size_t parse_size(const char* value);
 
 #endif // _ENVIRONMENT_H

Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/include/init.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/include/init.h?rev=634360&r1=634359&r2=634360&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/include/init.h (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/include/init.h Thu Mar  6 09:39:20 2008
@@ -25,13 +25,26 @@
                         char * name, jboolean daemon);
 jint vm_init1(JavaVM_Internal * java_vm, JavaVMInitArgs * vm_arguments);
 jint vm_init2(JNIEnv * jni_env);
+/**
+ * The method is called from both paths of VM shutdown, namely during <code>DestroyJavaVM</code> and
+ * <code>System.exit</code> right after <code>java.lang.System.execShutdownSequence</code> completion.
+ * @see java.lang.System.execShutdownSequence
+ */
+void exec_native_shutdown_sequence();
 jint vm_destroy(JavaVM_Internal * java_vm, jthread java_thread);
 void vm_interrupt_handler(int);
 void vm_dump_handler(int);
 
 void initialize_vm_cmd_state(Global_Env *p_env, JavaVMInitArgs* arguments);
 void set_log_levels_from_cmd(JavaVMInitArgs* vm_arguments);
-void parse_vm_arguments(Global_Env *p_env);
+/**
+ * Parses string pool size required for environment initialization.
+ */
+void parse_vm_arguments1(JavaVMInitArgs *vm_args, size_t *string_pool_size);
+/**
+ * Collects all arguments in VM properties.
+ */
+void parse_vm_arguments2(Global_Env *p_env);
 void* get_portlib_for_logger(Global_Env *p_env);
 void parse_jit_arguments(JavaVMInitArgs* vm_arguments);
 void print_generic_help();

Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/include/mem_alloc.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/include/mem_alloc.h?rev=634360&r1=634359&r2=634360&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/include/mem_alloc.h (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/include/mem_alloc.h Thu Mar  6 09:39:20 2008
@@ -30,15 +30,17 @@
 #define GBYTE 1024*MBYTE
 
 // pool is used for common stub code
-#define DEFAULT_COMMOT_JIT_CODE_POOL_SIZE           256*KBYTE
-// used for comressed VTable pointers
-#define DEFAULT_COMMOT_VTABLE_POOL_SIZE_NO_RESIZE   8*MBYTE
-//used for uncompressed VTable pointers
+#define DEFAULT_JIT_CODE_POOL_SIZE                  256*KBYTE
+// used for compressed VTable pointers
+#define DEFAULT_VTABLE_POOL_SIZE_NO_RESIZE          8*MBYTE
+// used for uncompressed VTable pointers
 #define DEFAULT_VTABLE_POOL_SIZE                    256*KBYTE
 // used for compiled code of a user class loader
 #define DEFAULT_CLASSLOADER_JIT_CODE_POOL_SIZE      256*KBYTE
 // used for compiled code of the bootstrap class loader
 #define DEFAULT_BOOTSTRAP_JIT_CODE_POOL_SIZE        1*MBYTE
+// used for a string pool
+#define DEFAULT_STRING_TABLE_SIZE                   262143
 
 #define MEMORY_UTILIZATION_LIMIT 15
 

Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/Environment.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/Environment.cpp?rev=634360&r1=634359&r2=634360&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/Environment.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/Environment.cpp Thu Mar  6 09:39:20 2008
@@ -34,8 +34,7 @@
 #include "compile.h"
 #include "component_manager.h"
 
-
-Global_Env::Global_Env(apr_pool_t * pool):
+Global_Env::Global_Env(apr_pool_t * pool, size_t string_pool_size):
 mem_pool(pool),
 bootstrap_class_loader(NULL),
 system_class_loader(NULL),
@@ -45,6 +44,7 @@
 dcList(NULL),
 assert_reg(NULL),
 vm_methods(NULL),
+string_pool(string_pool_size),
 total_loaded_class_count(0),
 unloaded_class_count(0),
 class_loading_verbose(false),
@@ -304,45 +304,50 @@
     return LoadCoreClass(this->string_pool.lookup(s));
 }
 
-static size_t parse_pool_size(const char* name, size_t default_size) {
-    if(!is_property_set(name, VM_PROPERTIES)) {
-        return default_size;
-    }
-
-    char* value = get_property(name, VM_PROPERTIES);
+size_t parse_size(const char* value) {
     size_t size = atol(value);
     int sizeModifier = tolower(value[strlen(value) - 1]);
-    destroy_property_value(value);
 
     size_t modifier;
     switch(sizeModifier) {
         case 'k': modifier = 1024; break;
-        case 'm': modifier = 1024*1024; break;
+        case 'm': modifier = 1024 * 1024; break;
         default: modifier = 1; break;
     }
 
-    return size*modifier;
+    return size * modifier;
+}
+
+static size_t parse_size_prop(const char* name, size_t default_size) {
+    if(!is_property_set(name, VM_PROPERTIES)) {
+        return default_size;
+    }
+
+    char* value = get_property(name, VM_PROPERTIES);
+    size_t size = parse_size(value);
+    destroy_property_value(value);
+    return size;
 }
 
 void Global_Env::init_pools() {
     size_t pool_size;
 
-    pool_size = parse_pool_size("vm.code_pool_size.stubs", DEFAULT_COMMOT_JIT_CODE_POOL_SIZE);
+    pool_size = parse_size_prop("vm.code_pool_size.stubs", DEFAULT_JIT_CODE_POOL_SIZE);
     assert(pool_size);
     GlobalCodeMemoryManager = new PoolManager(pool_size, system_page_size, use_large_pages, 
         true/*is_code*/, true/*is_resize_allowed*/);
 
     bool compress_vtables = vm_vtable_pointers_are_compressed();
-    pool_size = parse_pool_size("vm.vtable_pool_size",
-        compress_vtables?DEFAULT_COMMOT_VTABLE_POOL_SIZE_NO_RESIZE:DEFAULT_VTABLE_POOL_SIZE);
+    pool_size = parse_size_prop("vm.vtable_pool_size",
+        compress_vtables?DEFAULT_VTABLE_POOL_SIZE_NO_RESIZE : DEFAULT_VTABLE_POOL_SIZE);
     assert(pool_size);
     VTableMemoryManager = new PoolManager(pool_size, system_page_size, use_large_pages, 
         false/*is_code*/, !compress_vtables/*is_resize_allowed*/);
 
-    bootstrap_code_pool_size = pool_size = parse_pool_size("vm.code_pool_size.bootstrap_loader",
+    bootstrap_code_pool_size = pool_size = parse_size_prop("vm.code_pool_size.bootstrap_loader",
         DEFAULT_BOOTSTRAP_JIT_CODE_POOL_SIZE);
     assert(pool_size);
-    user_code_pool_size = pool_size = parse_pool_size("vm.code_pool_size.user_loader",
+    user_code_pool_size = pool_size = parse_size_prop("vm.code_pool_size.user_loader",
         DEFAULT_CLASSLOADER_JIT_CODE_POOL_SIZE);
     assert(pool_size);
 }

Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/String_Pool.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/String_Pool.cpp?rev=634360&r1=634359&r2=634360&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/String_Pool.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/String_Pool.cpp Thu Mar  6 09:39:20 2008
@@ -69,8 +69,9 @@
 } //String_Pool::Entry::Entry
 
 
-String_Pool::String_Pool() {
-    unsigned size = sizeof(Entry*) * STRING_TABLE_SIZE;
+String_Pool::String_Pool(size_t sp_size) {
+    string_pool_size = sp_size;
+    size_t size = sizeof(Entry*) * sp_size;
     table = (Entry **)memory_pool.alloc(size);
     memset(table, 0, size);
     
@@ -205,7 +206,7 @@
     ++key_stats->num_lookup;
 #endif
 
-    int hash = (int)(raw_hash % STRING_TABLE_SIZE);
+    int hash = (int)(raw_hash % string_pool_size);
 
     // search bucket for string, no lock
     for (Entry *e = table[hash]; e != NULL; e = e->next) {

Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/init/parse_arguments.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/init/parse_arguments.cpp?rev=634360&r1=634359&r2=634360&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/init/parse_arguments.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/init/parse_arguments.cpp Thu Mar  6 09:39:20 2008
@@ -70,6 +70,8 @@
 #define LECHO_VERSION LECHO(32, VERSION << VERSION_SVN_TAG << __DATE__ << VERSION_OS \
         << VERSION_ARCH << VERSION_COMPILER << VERSION_DEBUG_STRING)
 #define LECHO_VM_VERSION LECHO(33, VM_VERSION)
+#define STRING_POOL_SIZE_OPT "-XX:vm.stringPoolSize="
+
 extern bool dump_stubs;
 extern bool parallel_jit;
 extern const char * dump_file_name;
@@ -148,7 +150,24 @@
     return NULL;
 }
 
-void parse_vm_arguments(Global_Env *p_env)
+void parse_vm_arguments1(JavaVMInitArgs *vm_args, size_t *p_string_pool_size)
+{
+    *p_string_pool_size = DEFAULT_STRING_TABLE_SIZE;
+    for (int i = 0; i < vm_args->nOptions; i++) {
+        const char* option = vm_args->options[i].optionString;
+        if (begins_with(option, STRING_POOL_SIZE_OPT)) {
+            const char* arg = option + strlen(STRING_POOL_SIZE_OPT);
+            *p_string_pool_size = parse_size(arg);
+            if (0 == *p_string_pool_size) {
+                LECHO(34, "Negative or invalid string pool size. A default value is used, " << DEFAULT_STRING_TABLE_SIZE << " bytes.");
+                *p_string_pool_size = DEFAULT_STRING_TABLE_SIZE;
+            }
+            TRACE2("init", "string_pool_size = " << *p_string_pool_size);
+        }
+    }
+} // parse_vm_arguments1
+
+void parse_vm_arguments2(Global_Env *p_env)
 {
     bool version_printed = false;
 #ifdef _DEBUG
@@ -268,7 +287,7 @@
             // cut -Xms || -ms
             const char* arg = option + (begins_with(option, "-ms") ? 3 : 4);
             TRACE2("init", "gc.ms = " << arg);
-            if (atoi(arg) == 0) {
+            if (atoi(arg) <= 0) {
                 LECHO(34, "Negative or invalid heap size. Default value will be used!");
             }
             p_env->VmProperties()->set("gc.ms", arg);
@@ -277,18 +296,21 @@
             // cut -Xmx
             const char* arg = option + (begins_with(option, "-mx") ? 3 : 4);
             TRACE2("init", "gc.mx = " << arg);
-            if (atoi(arg) == 0) {
+            if (atoi(arg) <= 0) {
                 LECHO(34, "Negative or invalid heap size. Default value will be used!");
             }
             p_env->VmProperties()->set("gc.mx", arg);
         } else if (begins_with(option, "-Xss")) {
             const char* arg = option + 4;
             TRACE2("init", "thread.stacksize = " << arg);
-            if (atoi(arg) == 0) {
+            if (atoi(arg) <= 0) {
                 LECHO(34, "Negative or invalid stack size. Default value will be used!");
             }
             p_env->VmProperties()->set("thread.stacksize", arg);
-	}	  
+    	}	  
+        else if (begins_with(option, STRING_POOL_SIZE_OPT)) {
+            // the pool is already created
+        }
         else if (begins_with(option, "-agentlib:")) {
             p_env->TI->addAgent(option);
         }
@@ -404,7 +426,6 @@
                     p_env->assert_reg->enable_system = false;
                 }
         }
-
         else {
             LECHO(30, "Unknown option {0}" << option);
             USE_JAVA_HELP;
@@ -413,7 +434,7 @@
     } // for
 
     apr_pool_destroy(pool);
-} //parse_vm_arguments
+} //parse_vm_arguments2
 
 void parse_jit_arguments(JavaVMInitArgs* vm_arguments)
 {
@@ -518,9 +539,8 @@
 
         if (begins_with(option, "-verbose")) {
             /*
-            * -verbose[:class|:gc|:jni]
-            * Set specification log filters.
-            */
+             * -verbose[:class|:gc|:jni] set specification log filters.
+             */
             char* next_sym = option + 8;
             if (*next_sym == '\0') {
                 set_threshold(util::CLASS_LOGGER, INFO);

Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/init/vm_init.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/init/vm_init.cpp?rev=634360&r1=634359&r2=634360&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/init/vm_init.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/init/vm_init.cpp Thu Mar  6 09:39:20 2008
@@ -750,7 +750,7 @@
 
     tm_properties->use_soft_unreservation = get_boolean_property("thread.soft_unreservation", FALSE, VM_PROPERTIES);
 
-    parse_vm_arguments(vm_env);
+    parse_vm_arguments2(vm_env);
 
     vm_env->verify = get_boolean_property("vm.use_verifier", TRUE, VM_PROPERTIES);
 #ifdef REFS_USE_RUNTIME_SWITCH

Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/init/vm_shutdown.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/init/vm_shutdown.cpp?rev=634360&r1=634359&r2=634360&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/init/vm_shutdown.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/init/vm_shutdown.cpp Thu Mar  6 09:39:20 2008
@@ -202,6 +202,16 @@
 }
 
 /**
+ * A native analogue of <code>java.lang.System.execShutdownSequence</code>.
+ */
+void exec_native_shutdown_sequence() {
+    // print out gathered data
+#ifdef VM_STATS
+    VM_Statistics::get_vm_stats().print();
+#endif
+}
+
+/**
  * Waits until all non-daemon threads finish their execution,
  * initiates VM shutdown sequence and stops running threads if any.
  *
@@ -225,17 +235,13 @@
         return JNI_ERR;
     }
 
-    // Print out gathered data.
-#ifdef VM_STATS
-    VM_Statistics::get_vm_stats().print();
-#endif
-
     // Remember thread's uncaught exception if any.
     uncaught_exception = jni_env->ExceptionOccurred();
     jni_env->ExceptionClear();
 
     // Execute pending shutdown hooks & finalizers
     status = exec_shutdown_sequence(jni_env);
+    exec_native_shutdown_sequence();
     if (status != JNI_OK) return (jint)status;
     
     if(get_native_finalizer_thread_flag())
@@ -322,6 +328,7 @@
     jint status = AttachCurrentThread(java_vm, (void **)&jni_env, &vm_args);
     if (status == JNI_OK) {
         exec_shutdown_sequence(jni_env);
+        exec_native_shutdown_sequence();
         DetachCurrentThread(java_vm);
     }
 

Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/jni/jni.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/jni/jni.cpp?rev=634360&r1=634359&r2=634360&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/jni/jni.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/jni/jni.cpp Thu Mar  6 09:39:20 2008
@@ -481,8 +481,12 @@
         goto done;
     }
 
+    // Get a string pool size.
+    size_t string_pool_size;
+    parse_vm_arguments1(vm_args, &string_pool_size);
+
     // Create Global_Env.
-    vm_env = new(vm_global_pool) Global_Env(vm_global_pool);
+    vm_env = new(vm_global_pool) Global_Env(vm_global_pool, string_pool_size);
     if (vm_env == NULL) {
         status = JNI_ENOMEM;
         goto done;

Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/native/java_lang_VMExecutionEngine.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/native/java_lang_VMExecutionEngine.cpp?rev=634360&r1=634359&r2=634360&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/native/java_lang_VMExecutionEngine.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/native/java_lang_VMExecutionEngine.cpp Thu Mar  6 09:39:20 2008
@@ -16,7 +16,7 @@
  */
 
 /**
- * @file jjava_lang_VMExecutionEngine.cpp
+ * @file java_lang_VMExecutionEngine.cpp
  *
  * This file is a part of kernel class natives VM core component.
  * It contains implementation for native methods of 
@@ -49,6 +49,8 @@
 JNIEXPORT void JNICALL Java_java_lang_VMExecutionEngine_exit
   (JNIEnv * jni_env, jclass, jint status, jboolean needFinalization, jobjectArray)
 {
+    exec_native_shutdown_sequence();
+
     // ToDo: process jobjectArray
     hythread_global_lock();
     _exit(status);

Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/vm_stats.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/vm_stats.cpp?rev=634360&r1=634359&r2=634360&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/vm_stats.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/vm_stats.cpp Thu Mar  6 09:39:20 2008
@@ -525,7 +525,7 @@
 
 void VM_Statistics::print_string_pool_stats() {
     printf("\nBegin: Virtual Machine String Pool Statistics\n");
-    //printf("\tname\ttotal lookups\ttotal collisions\n");
+    printf("\tname\ttotal lookups\ttotal collisions\n");
     unsigned long num_lookup_total = 0;
     unsigned long num_lookup_collision_total = 0;
     String_Pool & string_pool = VM_Global_State::loader_env->string_pool;
@@ -810,15 +810,11 @@
     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);
-#ifdef VM_STATS    
-    fflush(stdout);
 
     print_rt_function_stats();
-
     print_string_pool_stats();
-#endif // VM_STATS
-
     printf("==== end VM statistics\n");
+    fflush(stdout);
 } //VM_Statistics::print
 
 #endif //VM_STATS