src/share/vm/services/memoryService.hpp

Mon, 15 Dec 2008 13:58:57 -0800

author
swamyv
date
Mon, 15 Dec 2008 13:58:57 -0800
changeset 924
2494ab195856
parent 435
a61af66fc99e
child 1524
db0d5eba9d20
permissions
-rw-r--r--

6653214: MemoryPoolMXBean.setUsageThreshold() does not support large heap sizes.
Reviewed-by: ysr, mchung

duke@435 1 /*
duke@435 2 * Copyright 2003-2006 Sun Microsystems, Inc. All Rights Reserved.
duke@435 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
duke@435 4 *
duke@435 5 * This code is free software; you can redistribute it and/or modify it
duke@435 6 * under the terms of the GNU General Public License version 2 only, as
duke@435 7 * published by the Free Software Foundation.
duke@435 8 *
duke@435 9 * This code is distributed in the hope that it will be useful, but WITHOUT
duke@435 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
duke@435 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
duke@435 12 * version 2 for more details (a copy is included in the LICENSE file that
duke@435 13 * accompanied this code).
duke@435 14 *
duke@435 15 * You should have received a copy of the GNU General Public License version
duke@435 16 * 2 along with this work; if not, write to the Free Software Foundation,
duke@435 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
duke@435 18 *
duke@435 19 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
duke@435 20 * CA 95054 USA or visit www.sun.com if you need additional information or
duke@435 21 * have any questions.
duke@435 22 *
duke@435 23 */
duke@435 24
duke@435 25 // Forward declaration
duke@435 26 class MemoryPool;
duke@435 27 class MemoryManager;
duke@435 28 class GCMemoryManager;
duke@435 29 class CollectedHeap;
duke@435 30 class Generation;
duke@435 31 class DefNewGeneration;
duke@435 32 class PSYoungGen;
duke@435 33 class PSOldGen;
duke@435 34 class PSPermGen;
duke@435 35 class CodeHeap;
duke@435 36 class ContiguousSpace;
duke@435 37 class CompactibleFreeListSpace;
duke@435 38 class PermanentGenerationSpec;
duke@435 39 class GenCollectedHeap;
duke@435 40 class ParallelScavengeHeap;
duke@435 41 class CompactingPermGenGen;
duke@435 42 class CMSPermGenGen;
duke@435 43
duke@435 44 // VM Monitoring and Management Support
duke@435 45
duke@435 46 class MemoryService : public AllStatic {
duke@435 47 private:
duke@435 48 enum {
duke@435 49 init_pools_list_size = 10,
duke@435 50 init_managers_list_size = 5
duke@435 51 };
duke@435 52
duke@435 53 // index for minor and major generations
duke@435 54 enum {
duke@435 55 minor = 0,
duke@435 56 major = 1,
duke@435 57 n_gens = 2
duke@435 58 };
duke@435 59
duke@435 60 static GrowableArray<MemoryPool*>* _pools_list;
duke@435 61 static GrowableArray<MemoryManager*>* _managers_list;
duke@435 62
duke@435 63 // memory managers for minor and major GC statistics
duke@435 64 static GCMemoryManager* _major_gc_manager;
duke@435 65 static GCMemoryManager* _minor_gc_manager;
duke@435 66
duke@435 67 // Code heap memory pool
duke@435 68 static MemoryPool* _code_heap_pool;
duke@435 69
duke@435 70 static void add_generation_memory_pool(Generation* gen,
duke@435 71 MemoryManager* major_mgr,
duke@435 72 MemoryManager* minor_mgr);
duke@435 73 static void add_generation_memory_pool(Generation* gen,
duke@435 74 MemoryManager* major_mgr) {
duke@435 75 add_generation_memory_pool(gen, major_mgr, NULL);
duke@435 76 }
duke@435 77
duke@435 78 static void add_compact_perm_gen_memory_pool(CompactingPermGenGen* perm_gen,
duke@435 79 MemoryManager* mgr);
duke@435 80 static void add_cms_perm_gen_memory_pool(CMSPermGenGen* perm_gen,
duke@435 81 MemoryManager* mgr);
duke@435 82
duke@435 83 static void add_psYoung_memory_pool(PSYoungGen* gen,
duke@435 84 MemoryManager* major_mgr,
duke@435 85 MemoryManager* minor_mgr);
duke@435 86 static void add_psOld_memory_pool(PSOldGen* gen,
duke@435 87 MemoryManager* mgr);
duke@435 88 static void add_psPerm_memory_pool(PSPermGen* perm,
duke@435 89 MemoryManager* mgr);
duke@435 90
duke@435 91
duke@435 92 static MemoryPool* add_space(ContiguousSpace* space,
duke@435 93 const char* name,
duke@435 94 bool is_heap,
duke@435 95 size_t max_size,
duke@435 96 bool support_usage_threshold);
duke@435 97 static MemoryPool* add_survivor_spaces(DefNewGeneration* gen,
duke@435 98 const char* name,
duke@435 99 bool is_heap,
duke@435 100 size_t max_size,
duke@435 101 bool support_usage_threshold);
duke@435 102 static MemoryPool* add_gen(Generation* gen,
duke@435 103 const char* name,
duke@435 104 bool is_heap,
duke@435 105 bool support_usage_threshold);
duke@435 106 static MemoryPool* add_cms_space(CompactibleFreeListSpace* space,
duke@435 107 const char* name,
duke@435 108 bool is_heap,
duke@435 109 size_t max_size,
duke@435 110 bool support_usage_threshold);
duke@435 111
duke@435 112 static void add_gen_collected_heap_info(GenCollectedHeap* heap);
duke@435 113 static void add_parallel_scavenge_heap_info(ParallelScavengeHeap* heap);
duke@435 114
duke@435 115 public:
duke@435 116 static void set_universe_heap(CollectedHeap* heap);
duke@435 117 static void add_code_heap_memory_pool(CodeHeap* heap);
duke@435 118
duke@435 119 static MemoryPool* get_memory_pool(instanceHandle pool);
duke@435 120 static MemoryManager* get_memory_manager(instanceHandle mgr);
duke@435 121
duke@435 122 static const int num_memory_pools() {
duke@435 123 return _pools_list->length();
duke@435 124 }
duke@435 125 static const int num_memory_managers() {
duke@435 126 return _managers_list->length();
duke@435 127 }
duke@435 128
duke@435 129 static MemoryPool* get_memory_pool(int index) {
duke@435 130 return _pools_list->at(index);
duke@435 131 }
duke@435 132
duke@435 133 static MemoryManager* get_memory_manager(int index) {
duke@435 134 return _managers_list->at(index);
duke@435 135 }
duke@435 136
duke@435 137 static void track_memory_usage();
duke@435 138 static void track_code_cache_memory_usage() {
duke@435 139 track_memory_pool_usage(_code_heap_pool);
duke@435 140 }
duke@435 141 static void track_memory_pool_usage(MemoryPool* pool);
duke@435 142
duke@435 143 static void gc_begin(bool fullGC);
duke@435 144 static void gc_end(bool fullGC);
duke@435 145
duke@435 146 static void oops_do(OopClosure* f);
duke@435 147
duke@435 148 static bool get_verbose() { return PrintGC; }
duke@435 149 static bool set_verbose(bool verbose);
duke@435 150
duke@435 151 // Create an instance of java/lang/management/MemoryUsage
duke@435 152 static Handle create_MemoryUsage_obj(MemoryUsage usage, TRAPS);
duke@435 153 };
duke@435 154
duke@435 155 class TraceMemoryManagerStats : public StackObj {
duke@435 156 private:
duke@435 157 bool _fullGC;
duke@435 158 public:
duke@435 159 TraceMemoryManagerStats(bool fullGC);
duke@435 160 TraceMemoryManagerStats(Generation::Name kind);
duke@435 161 ~TraceMemoryManagerStats();
duke@435 162 };

mercurial