1.1 --- a/src/share/vm/services/memReporter.cpp Thu Oct 18 13:09:47 2012 -0400 1.2 +++ b/src/share/vm/services/memReporter.cpp Fri Oct 19 21:40:07 2012 -0400 1.3 @@ -51,6 +51,7 @@ 1.4 1.5 report_summaries(baseline); 1.6 if (!summary_only && MemTracker::track_callsite()) { 1.7 + report_virtual_memory_map(baseline); 1.8 report_callsites(baseline); 1.9 } 1.10 _outputer.done(); 1.11 @@ -74,6 +75,25 @@ 1.12 _outputer.done_category_summary(); 1.13 } 1.14 1.15 +void BaselineReporter::report_virtual_memory_map(const MemBaseline& baseline) { 1.16 + _outputer.start_virtual_memory_map(); 1.17 + MemBaseline* pBL = const_cast<MemBaseline*>(&baseline); 1.18 + MemPointerArrayIteratorImpl itr = MemPointerArrayIteratorImpl(pBL->_vm_map); 1.19 + VMMemRegionEx* rgn = (VMMemRegionEx*)itr.current(); 1.20 + while (rgn != NULL) { 1.21 + if (rgn->is_reserved_region()) { 1.22 + _outputer.reserved_memory_region(FLAGS_TO_MEMORY_TYPE(rgn->flags()), 1.23 + rgn->base(), rgn->base() + rgn->size(), amount_in_current_scale(rgn->size()), rgn->pc()); 1.24 + } else { 1.25 + _outputer.committed_memory_region(rgn->base(), rgn->base() + rgn->size(), 1.26 + amount_in_current_scale(rgn->size()), rgn->pc()); 1.27 + } 1.28 + rgn = (VMMemRegionEx*)itr.next(); 1.29 + } 1.30 + 1.31 + _outputer.done_virtual_memory_map(); 1.32 +} 1.33 + 1.34 void BaselineReporter::report_callsites(const MemBaseline& baseline) { 1.35 _outputer.start_callsite(); 1.36 MemBaseline* pBL = const_cast<MemBaseline*>(&baseline); 1.37 @@ -324,6 +344,40 @@ 1.38 _output->print_cr(" "); 1.39 } 1.40 1.41 + 1.42 +void BaselineTTYOutputer::start_virtual_memory_map() { 1.43 + _output->print_cr("Virtual memory map:"); 1.44 +} 1.45 + 1.46 +void BaselineTTYOutputer::reserved_memory_region(MEMFLAGS type, address base, address end, 1.47 + size_t size, address pc) { 1.48 + const char* unit = memory_unit(_scale); 1.49 + char buf[128]; 1.50 + int offset; 1.51 + _output->print_cr(" "); 1.52 + _output->print_cr("[" PTR_FORMAT " - " PTR_FORMAT "] reserved %d%s for %s", base, end, size, unit, 1.53 + MemBaseline::type2name(type)); 1.54 + if (os::dll_address_to_function_name(pc, buf, sizeof(buf), &offset)) { 1.55 + _output->print_cr("\t\tfrom [%s+0x%x]", buf, offset); 1.56 + } 1.57 +} 1.58 + 1.59 +void BaselineTTYOutputer::committed_memory_region(address base, address end, size_t size, address pc) { 1.60 + const char* unit = memory_unit(_scale); 1.61 + char buf[128]; 1.62 + int offset; 1.63 + _output->print("\t[" PTR_FORMAT " - " PTR_FORMAT "] committed %d%s", base, end, size, unit); 1.64 + if (os::dll_address_to_function_name(pc, buf, sizeof(buf), &offset)) { 1.65 + _output->print_cr(" from [%s+0x%x]", buf, offset); 1.66 + } 1.67 +} 1.68 + 1.69 +void BaselineTTYOutputer::done_virtual_memory_map() { 1.70 + _output->print_cr(" "); 1.71 +} 1.72 + 1.73 + 1.74 + 1.75 void BaselineTTYOutputer::start_callsite() { 1.76 _output->print_cr("Details:"); 1.77 _output->print_cr(" "); 1.78 @@ -337,7 +391,7 @@ 1.79 size_t malloc_count) { 1.80 if (malloc_amt > 0) { 1.81 const char* unit = memory_unit(_scale); 1.82 - char buf[64]; 1.83 + char buf[128]; 1.84 int offset; 1.85 if (pc == 0) { 1.86 _output->print("[BOOTSTRAP]%18s", " "); 1.87 @@ -357,7 +411,7 @@ 1.88 size_t committed_amt) { 1.89 if (reserved_amt > 0) { 1.90 const char* unit = memory_unit(_scale); 1.91 - char buf[64]; 1.92 + char buf[128]; 1.93 int offset; 1.94 if (pc == 0) { 1.95 _output->print("[BOOTSTRAP]%18s", " "); 1.96 @@ -502,7 +556,7 @@ 1.97 int malloc_diff, int malloc_count_diff) { 1.98 if (malloc_diff != 0) { 1.99 const char* unit = memory_unit(_scale); 1.100 - char buf[64]; 1.101 + char buf[128]; 1.102 int offset; 1.103 if (pc == 0) { 1.104 _output->print_cr("[BOOTSTRAP]%18s", " ");