< prev index next >

src/hotspot/share/services/management.cpp

Print this page
rev 51304 : [mq]: 8207200-getmemoryusage-consistency

*** 711,764 **** // Returns a java/lang/management/MemoryUsage object representing // the memory usage for the heap or non-heap memory. JVM_ENTRY(jobject, jmm_GetMemoryUsage(JNIEnv* env, jboolean heap)) ResourceMark rm(THREAD); ! // Calculate the memory usage size_t total_init = 0; size_t total_used = 0; size_t total_committed = 0; size_t total_max = 0; bool has_undefined_init_size = false; bool has_undefined_max_size = false; for (int i = 0; i < MemoryService::num_memory_pools(); i++) { MemoryPool* pool = MemoryService::get_memory_pool(i); ! if ((heap && pool->is_heap()) || (!heap && pool->is_non_heap())) { MemoryUsage u = pool->get_memory_usage(); total_used += u.used(); total_committed += u.committed(); ! if (u.init_size() == (size_t)-1) { has_undefined_init_size = true; } if (!has_undefined_init_size) { total_init += u.init_size(); } ! if (u.max_size() == (size_t)-1) { has_undefined_max_size = true; } if (!has_undefined_max_size) { total_max += u.max_size(); } } } // if any one of the memory pool has undefined init_size or max_size, ! // set it to -1 if (has_undefined_init_size) { ! total_init = (size_t)-1; } if (has_undefined_max_size) { ! total_max = (size_t)-1; } ! MemoryUsage usage((heap ? InitialHeapSize : total_init), ! total_used, ! total_committed, ! (heap ? Universe::heap()->max_capacity() : total_max)); Handle obj = MemoryService::create_MemoryUsage_obj(usage, CHECK_NULL); return JNIHandles::make_local(env, obj()); JVM_END --- 711,767 ---- // Returns a java/lang/management/MemoryUsage object representing // the memory usage for the heap or non-heap memory. JVM_ENTRY(jobject, jmm_GetMemoryUsage(JNIEnv* env, jboolean heap)) ResourceMark rm(THREAD); ! MemoryUsage usage; ! ! if (heap) { ! usage = Universe::heap()->memory_usage(); ! } else { ! // Calculate the memory usage by summing up the pools. size_t total_init = 0; size_t total_used = 0; size_t total_committed = 0; size_t total_max = 0; bool has_undefined_init_size = false; bool has_undefined_max_size = false; for (int i = 0; i < MemoryService::num_memory_pools(); i++) { MemoryPool* pool = MemoryService::get_memory_pool(i); ! if (pool->is_non_heap()) { MemoryUsage u = pool->get_memory_usage(); total_used += u.used(); total_committed += u.committed(); ! if (u.init_size() == MemoryUsage::undefined_size()) { has_undefined_init_size = true; } if (!has_undefined_init_size) { total_init += u.init_size(); } ! if (u.max_size() == MemoryUsage::undefined_size()) { has_undefined_max_size = true; } if (!has_undefined_max_size) { total_max += u.max_size(); } } } // if any one of the memory pool has undefined init_size or max_size, ! // set it to MemoryUsage::undefined_size() if (has_undefined_init_size) { ! total_init = MemoryUsage::undefined_size(); } if (has_undefined_max_size) { ! total_max = MemoryUsage::undefined_size(); } ! usage = MemoryUsage(total_init, total_used, total_committed, total_max); ! } Handle obj = MemoryService::create_MemoryUsage_obj(usage, CHECK_NULL); return JNIHandles::make_local(env, obj()); JVM_END
< prev index next >