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