Mercurial > hg > truffle
comparison src/share/vm/memory/metaspace.cpp @ 12839:a6414751d537
8025996: Track metaspace usage when metaspace is expanded
Reviewed-by: coleenp, ehelin
author | stefank |
---|---|
date | Mon, 07 Oct 2013 15:51:17 +0200 |
parents | 85c1ca43713f |
children | bdfbb1fb19ca |
comparison
equal
deleted
inserted
replaced
12838:85c1ca43713f | 12839:a6414751d537 |
---|---|
41 #include "runtime/init.hpp" | 41 #include "runtime/init.hpp" |
42 #include "runtime/java.hpp" | 42 #include "runtime/java.hpp" |
43 #include "runtime/mutex.hpp" | 43 #include "runtime/mutex.hpp" |
44 #include "runtime/orderAccess.hpp" | 44 #include "runtime/orderAccess.hpp" |
45 #include "services/memTracker.hpp" | 45 #include "services/memTracker.hpp" |
46 #include "services/memoryService.hpp" | |
46 #include "utilities/copy.hpp" | 47 #include "utilities/copy.hpp" |
47 #include "utilities/debug.hpp" | 48 #include "utilities/debug.hpp" |
48 | 49 |
49 typedef BinaryTreeDictionary<Metablock, FreeList> BlockTreeDictionary; | 50 typedef BinaryTreeDictionary<Metablock, FreeList> BlockTreeDictionary; |
50 typedef BinaryTreeDictionary<Metachunk, FreeList> ChunkTreeDictionary; | 51 typedef BinaryTreeDictionary<Metachunk, FreeList> ChunkTreeDictionary; |
732 | 733 |
733 // Called when an allocation from the current chunk fails. | 734 // Called when an allocation from the current chunk fails. |
734 // Gets a new chunk (may require getting a new virtual space), | 735 // Gets a new chunk (may require getting a new virtual space), |
735 // and allocates from that chunk. | 736 // and allocates from that chunk. |
736 MetaWord* grow_and_allocate(size_t word_size); | 737 MetaWord* grow_and_allocate(size_t word_size); |
738 | |
739 // Notify memory usage to MemoryService. | |
740 void track_metaspace_memory_usage(); | |
737 | 741 |
738 // debugging support. | 742 // debugging support. |
739 | 743 |
740 void dump(outputStream* const out) const; | 744 void dump(outputStream* const out) const; |
741 void print_on(outputStream* st) const; | 745 void print_on(outputStream* st) const; |
2058 Metachunk::overhead()); | 2062 Metachunk::overhead()); |
2059 } | 2063 } |
2060 return chunk_word_size; | 2064 return chunk_word_size; |
2061 } | 2065 } |
2062 | 2066 |
2067 void SpaceManager::track_metaspace_memory_usage() { | |
2068 if (is_init_completed()) { | |
2069 if (is_class()) { | |
2070 MemoryService::track_compressed_class_memory_usage(); | |
2071 } | |
2072 MemoryService::track_metaspace_memory_usage(); | |
2073 } | |
2074 } | |
2075 | |
2063 MetaWord* SpaceManager::grow_and_allocate(size_t word_size) { | 2076 MetaWord* SpaceManager::grow_and_allocate(size_t word_size) { |
2064 assert(vs_list()->current_virtual_space() != NULL, | 2077 assert(vs_list()->current_virtual_space() != NULL, |
2065 "Should have been set"); | 2078 "Should have been set"); |
2066 assert(current_chunk() == NULL || | 2079 assert(current_chunk() == NULL || |
2067 current_chunk()->allocate(word_size) == NULL, | 2080 current_chunk()->allocate(word_size) == NULL, |
2096 if (next != NULL) { | 2109 if (next != NULL) { |
2097 // Add to this manager's list of chunks in use. | 2110 // Add to this manager's list of chunks in use. |
2098 add_chunk(next, false); | 2111 add_chunk(next, false); |
2099 mem = next->allocate(word_size); | 2112 mem = next->allocate(word_size); |
2100 } | 2113 } |
2114 | |
2115 // Track metaspace memory usage statistic. | |
2116 track_metaspace_memory_usage(); | |
2101 | 2117 |
2102 return mem; | 2118 return mem; |
2103 } | 2119 } |
2104 | 2120 |
2105 void SpaceManager::print_on(outputStream* st) const { | 2121 void SpaceManager::print_on(outputStream* st) const { |