comparison src/share/vm/memory/filemap.cpp @ 6882:716c64bda5ba

7199092: NMT: NMT needs to deal overlapped virtual memory ranges Summary: Enhanced virtual memory tracking to track committed regions as well as reserved regions, so NMT now can generate virtual memory map. Reviewed-by: acorn, coleenp
author zgu
date Fri, 19 Oct 2012 21:40:07 -0400
parents da91efe96a93
children fe81517cfb77
comparison
equal deleted inserted replaced
6879:8ebcedb7604d 6882:716c64bda5ba
27 #include "classfile/symbolTable.hpp" 27 #include "classfile/symbolTable.hpp"
28 #include "memory/filemap.hpp" 28 #include "memory/filemap.hpp"
29 #include "runtime/arguments.hpp" 29 #include "runtime/arguments.hpp"
30 #include "runtime/java.hpp" 30 #include "runtime/java.hpp"
31 #include "runtime/os.hpp" 31 #include "runtime/os.hpp"
32 #include "services/memTracker.hpp"
32 #include "utilities/defaultStream.hpp" 33 #include "utilities/defaultStream.hpp"
33 34
34 # include <sys/stat.h> 35 # include <sys/stat.h>
35 # include <errno.h> 36 # include <errno.h>
36 37
342 ReservedSpace rs(size, alignment, false, requested_addr); 343 ReservedSpace rs(size, alignment, false, requested_addr);
343 if (!rs.is_reserved()) { 344 if (!rs.is_reserved()) {
344 fail_continue(err_msg("Unable to reserved shared space at required address " INTPTR_FORMAT, requested_addr)); 345 fail_continue(err_msg("Unable to reserved shared space at required address " INTPTR_FORMAT, requested_addr));
345 return rs; 346 return rs;
346 } 347 }
348 // the reserved virtual memory is for mapping class data sharing archive
349 if (MemTracker::is_on()) {
350 MemTracker::record_virtual_memory_type((address)rs.base(), mtClassShared);
351 }
347 return rs; 352 return rs;
348 } 353 }
349
350 // Memory map a region in the address space.
351
352 char* FileMapInfo::map_region(int i, ReservedSpace rs) {
353 struct FileMapInfo::FileMapHeader::space_info* si = &_header._space[i];
354 size_t used = si->_used;
355 size_t size = align_size_up(used, os::vm_allocation_granularity());
356
357 ReservedSpace mapped_rs = rs.first_part(size, true, true);
358 ReservedSpace unmapped_rs = rs.last_part(size);
359 mapped_rs.release();
360
361 return map_region(i);
362 }
363
364 354
365 // Memory map a region in the address space. 355 // Memory map a region in the address space.
366 static const char* shared_region_name[] = { "ReadOnly", "ReadWrite", "MiscData", "MiscCode"}; 356 static const char* shared_region_name[] = { "ReadOnly", "ReadWrite", "MiscData", "MiscCode"};
367 357
368 char* FileMapInfo::map_region(int i) { 358 char* FileMapInfo::map_region(int i) {