Mercurial > hg > truffle
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) { |