hotspot/src/share/vm/services/management.cpp
changeset 11591 854c0dff3844
parent 11441 a89f443814cd
child 11598 db8931f2a56d
equal deleted inserted replaced
11589:27147f149e1f 11591:854c0dff3844
  2045   GCMemoryManager* mgr = get_gc_memory_manager_from_jobject(obj, CHECK);
  2045   GCMemoryManager* mgr = get_gc_memory_manager_from_jobject(obj, CHECK);
  2046 
  2046 
  2047   // Make a copy of the last GC statistics
  2047   // Make a copy of the last GC statistics
  2048   // GC may occur while constructing the last GC information
  2048   // GC may occur while constructing the last GC information
  2049   int num_pools = MemoryService::num_memory_pools();
  2049   int num_pools = MemoryService::num_memory_pools();
  2050   GCStatInfo* stat = new GCStatInfo(num_pools);
  2050   GCStatInfo stat(num_pools);
  2051   if (mgr->get_last_gc_stat(stat) == 0) {
  2051   if (mgr->get_last_gc_stat(&stat) == 0) {
  2052     gc_stat->gc_index = 0;
  2052     gc_stat->gc_index = 0;
  2053     return;
  2053     return;
  2054   }
  2054   }
  2055 
  2055 
  2056   gc_stat->gc_index = stat->gc_index();
  2056   gc_stat->gc_index = stat.gc_index();
  2057   gc_stat->start_time = Management::ticks_to_ms(stat->start_time());
  2057   gc_stat->start_time = Management::ticks_to_ms(stat.start_time());
  2058   gc_stat->end_time = Management::ticks_to_ms(stat->end_time());
  2058   gc_stat->end_time = Management::ticks_to_ms(stat.end_time());
  2059 
  2059 
  2060   // Current implementation does not have GC extension attributes
  2060   // Current implementation does not have GC extension attributes
  2061   gc_stat->num_gc_ext_attributes = 0;
  2061   gc_stat->num_gc_ext_attributes = 0;
  2062 
  2062 
  2063   // Fill the arrays of MemoryUsage objects with before and after GC
  2063   // Fill the arrays of MemoryUsage objects with before and after GC
  2071                                              num_pools,
  2071                                              num_pools,
  2072                                              CHECK);
  2072                                              CHECK);
  2073   objArrayHandle usage_after_gc_ah(THREAD, au);
  2073   objArrayHandle usage_after_gc_ah(THREAD, au);
  2074 
  2074 
  2075   for (int i = 0; i < num_pools; i++) {
  2075   for (int i = 0; i < num_pools; i++) {
  2076     Handle before_usage = MemoryService::create_MemoryUsage_obj(stat->before_gc_usage_for_pool(i), CHECK);
  2076     Handle before_usage = MemoryService::create_MemoryUsage_obj(stat.before_gc_usage_for_pool(i), CHECK);
  2077     Handle after_usage;
  2077     Handle after_usage;
  2078 
  2078 
  2079     MemoryUsage u = stat->after_gc_usage_for_pool(i);
  2079     MemoryUsage u = stat.after_gc_usage_for_pool(i);
  2080     if (u.max_size() == 0 && u.used() > 0) {
  2080     if (u.max_size() == 0 && u.used() > 0) {
  2081       // If max size == 0, this pool is a survivor space.
  2081       // If max size == 0, this pool is a survivor space.
  2082       // Set max size = -1 since the pools will be swapped after GC.
  2082       // Set max size = -1 since the pools will be swapped after GC.
  2083       MemoryUsage usage(u.init_size(), u.used(), u.committed(), (size_t)-1);
  2083       MemoryUsage usage(u.init_size(), u.used(), u.committed(), (size_t)-1);
  2084       after_usage = MemoryService::create_MemoryUsage_obj(usage, CHECK);
  2084       after_usage = MemoryService::create_MemoryUsage_obj(usage, CHECK);
  2085     } else {
  2085     } else {
  2086       after_usage = MemoryService::create_MemoryUsage_obj(stat->after_gc_usage_for_pool(i), CHECK);
  2086       after_usage = MemoryService::create_MemoryUsage_obj(stat.after_gc_usage_for_pool(i), CHECK);
  2087     }
  2087     }
  2088     usage_before_gc_ah->obj_at_put(i, before_usage());
  2088     usage_before_gc_ah->obj_at_put(i, before_usage());
  2089     usage_after_gc_ah->obj_at_put(i, after_usage());
  2089     usage_after_gc_ah->obj_at_put(i, after_usage());
  2090   }
  2090   }
  2091 
  2091