Mercurial > hg > graal-jvmci-8
annotate src/share/vm/services/g1MemoryPool.cpp @ 1092:ed52bcc32739
6880903: G1: G1 reports incorrect Runtime.maxMemory()
Summary: G1 reports committed memory instead of reserved memory from the Runtime.maxMemory() method
Reviewed-by: ysr, jmasa
author | tonyp |
---|---|
date | Fri, 04 Dec 2009 07:44:35 -0500 |
parents | db0d5eba9d20 |
children | afc30fccf324 |
rev | line source |
---|---|
1089 | 1 /* |
2 * Copyright (c) 2007 Sun Microsystems, Inc. All Rights Reserved. | |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
4 * | |
5 * This code is free software; you can redistribute it and/or modify it | |
6 * under the terms of the GNU General Public License version 2 only, as | |
7 * published by the Free Software Foundation. | |
8 * | |
9 * This code is distributed in the hope that it will be useful, but WITHOUT | |
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
12 * version 2 for more details (a copy is included in the LICENSE file that | |
13 * accompanied this code). | |
14 * | |
15 * You should have received a copy of the GNU General Public License version | |
16 * 2 along with this work; if not, write to the Free Software Foundation, | |
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
18 * | |
19 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, | |
20 * CA 95054 USA or visit www.sun.com if you need additional information or | |
21 * have any questions. | |
22 * | |
23 */ | |
24 | |
25 # include "incls/_precompiled.incl" | |
26 # include "incls/_g1MemoryPool.cpp.incl" | |
27 | |
28 G1MemoryPoolSuper::G1MemoryPoolSuper(G1CollectedHeap* g1h, | |
29 const char* name, | |
30 size_t init_size, | |
31 size_t max_size, | |
32 bool support_usage_threshold) : | |
33 _g1h(g1h), CollectedMemoryPool(name, | |
34 MemoryPool::Heap, | |
35 init_size, | |
36 max_size, | |
37 support_usage_threshold) { | |
38 assert(UseG1GC, "sanity"); | |
39 } | |
40 | |
41 // See the comment at the top of g1MemoryPool.hpp | |
42 size_t G1MemoryPoolSuper::eden_space_committed(G1CollectedHeap* g1h) { | |
43 return eden_space_used(g1h); | |
44 } | |
45 | |
46 // See the comment at the top of g1MemoryPool.hpp | |
47 size_t G1MemoryPoolSuper::eden_space_used(G1CollectedHeap* g1h) { | |
48 size_t young_list_length = g1h->young_list_length(); | |
49 size_t eden_used = young_list_length * HeapRegion::GrainBytes; | |
50 size_t survivor_used = survivor_space_used(g1h); | |
51 eden_used = subtract_up_to_zero(eden_used, survivor_used); | |
52 return eden_used; | |
53 } | |
54 | |
55 // See the comment at the top of g1MemoryPool.hpp | |
56 size_t G1MemoryPoolSuper::eden_space_max(G1CollectedHeap* g1h) { | |
57 return eden_space_committed(g1h); | |
58 } | |
59 | |
60 // See the comment at the top of g1MemoryPool.hpp | |
61 size_t G1MemoryPoolSuper::survivor_space_committed(G1CollectedHeap* g1h) { | |
62 return survivor_space_used(g1h); | |
63 } | |
64 | |
65 // See the comment at the top of g1MemoryPool.hpp | |
66 size_t G1MemoryPoolSuper::survivor_space_used(G1CollectedHeap* g1h) { | |
67 size_t survivor_num = g1h->g1_policy()->recorded_survivor_regions(); | |
68 size_t survivor_used = survivor_num * HeapRegion::GrainBytes; | |
69 return survivor_used; | |
70 } | |
71 | |
72 // See the comment at the top of g1MemoryPool.hpp | |
73 size_t G1MemoryPoolSuper::survivor_space_max(G1CollectedHeap* g1h) { | |
74 return survivor_space_committed(g1h); | |
75 } | |
76 | |
77 // See the comment at the top of g1MemoryPool.hpp | |
78 size_t G1MemoryPoolSuper::old_space_committed(G1CollectedHeap* g1h) { | |
79 size_t committed = overall_committed(g1h); | |
80 size_t eden_committed = eden_space_committed(g1h); | |
81 size_t survivor_committed = survivor_space_committed(g1h); | |
82 committed = subtract_up_to_zero(committed, eden_committed); | |
83 committed = subtract_up_to_zero(committed, survivor_committed); | |
84 return committed; | |
85 } | |
86 | |
87 // See the comment at the top of g1MemoryPool.hpp | |
88 size_t G1MemoryPoolSuper::old_space_used(G1CollectedHeap* g1h) { | |
89 size_t used = overall_used(g1h); | |
90 size_t eden_used = eden_space_used(g1h); | |
91 size_t survivor_used = survivor_space_used(g1h); | |
92 used = subtract_up_to_zero(used, eden_used); | |
93 used = subtract_up_to_zero(used, survivor_used); | |
94 return used; | |
95 } | |
96 | |
97 // See the comment at the top of g1MemoryPool.hpp | |
98 size_t G1MemoryPoolSuper::old_space_max(G1CollectedHeap* g1h) { | |
1092
ed52bcc32739
6880903: G1: G1 reports incorrect Runtime.maxMemory()
tonyp
parents:
1089
diff
changeset
|
99 size_t max = overall_max(g1h); |
1089 | 100 size_t eden_max = eden_space_max(g1h); |
101 size_t survivor_max = survivor_space_max(g1h); | |
102 max = subtract_up_to_zero(max, eden_max); | |
103 max = subtract_up_to_zero(max, survivor_max); | |
104 return max; | |
105 } | |
106 | |
107 G1EdenPool::G1EdenPool(G1CollectedHeap* g1h) : | |
108 G1MemoryPoolSuper(g1h, | |
109 "G1 Eden", | |
110 eden_space_committed(g1h), /* init_size */ | |
111 eden_space_max(g1h), /* max_size */ | |
112 false /* support_usage_threshold */) { | |
113 } | |
114 | |
115 MemoryUsage G1EdenPool::get_memory_usage() { | |
1092
ed52bcc32739
6880903: G1: G1 reports incorrect Runtime.maxMemory()
tonyp
parents:
1089
diff
changeset
|
116 size_t initial_sz = initial_size(); |
ed52bcc32739
6880903: G1: G1 reports incorrect Runtime.maxMemory()
tonyp
parents:
1089
diff
changeset
|
117 size_t max_sz = max_size(); |
ed52bcc32739
6880903: G1: G1 reports incorrect Runtime.maxMemory()
tonyp
parents:
1089
diff
changeset
|
118 size_t used = used_in_bytes(); |
ed52bcc32739
6880903: G1: G1 reports incorrect Runtime.maxMemory()
tonyp
parents:
1089
diff
changeset
|
119 size_t committed = eden_space_committed(); |
1089 | 120 |
1092
ed52bcc32739
6880903: G1: G1 reports incorrect Runtime.maxMemory()
tonyp
parents:
1089
diff
changeset
|
121 return MemoryUsage(initial_sz, used, committed, max_sz); |
1089 | 122 } |
123 | |
124 G1SurvivorPool::G1SurvivorPool(G1CollectedHeap* g1h) : | |
125 G1MemoryPoolSuper(g1h, | |
126 "G1 Survivor", | |
127 survivor_space_committed(g1h), /* init_size */ | |
128 survivor_space_max(g1h), /* max_size */ | |
129 false /* support_usage_threshold */) { | |
130 } | |
131 | |
132 MemoryUsage G1SurvivorPool::get_memory_usage() { | |
1092
ed52bcc32739
6880903: G1: G1 reports incorrect Runtime.maxMemory()
tonyp
parents:
1089
diff
changeset
|
133 size_t initial_sz = initial_size(); |
ed52bcc32739
6880903: G1: G1 reports incorrect Runtime.maxMemory()
tonyp
parents:
1089
diff
changeset
|
134 size_t max_sz = max_size(); |
ed52bcc32739
6880903: G1: G1 reports incorrect Runtime.maxMemory()
tonyp
parents:
1089
diff
changeset
|
135 size_t used = used_in_bytes(); |
ed52bcc32739
6880903: G1: G1 reports incorrect Runtime.maxMemory()
tonyp
parents:
1089
diff
changeset
|
136 size_t committed = survivor_space_committed(); |
1089 | 137 |
1092
ed52bcc32739
6880903: G1: G1 reports incorrect Runtime.maxMemory()
tonyp
parents:
1089
diff
changeset
|
138 return MemoryUsage(initial_sz, used, committed, max_sz); |
1089 | 139 } |
140 | |
141 G1OldGenPool::G1OldGenPool(G1CollectedHeap* g1h) : | |
142 G1MemoryPoolSuper(g1h, | |
143 "G1 Old Gen", | |
144 old_space_committed(g1h), /* init_size */ | |
145 old_space_max(g1h), /* max_size */ | |
146 true /* support_usage_threshold */) { | |
147 } | |
148 | |
149 MemoryUsage G1OldGenPool::get_memory_usage() { | |
1092
ed52bcc32739
6880903: G1: G1 reports incorrect Runtime.maxMemory()
tonyp
parents:
1089
diff
changeset
|
150 size_t initial_sz = initial_size(); |
ed52bcc32739
6880903: G1: G1 reports incorrect Runtime.maxMemory()
tonyp
parents:
1089
diff
changeset
|
151 size_t max_sz = max_size(); |
ed52bcc32739
6880903: G1: G1 reports incorrect Runtime.maxMemory()
tonyp
parents:
1089
diff
changeset
|
152 size_t used = used_in_bytes(); |
ed52bcc32739
6880903: G1: G1 reports incorrect Runtime.maxMemory()
tonyp
parents:
1089
diff
changeset
|
153 size_t committed = old_space_committed(); |
1089 | 154 |
1092
ed52bcc32739
6880903: G1: G1 reports incorrect Runtime.maxMemory()
tonyp
parents:
1089
diff
changeset
|
155 return MemoryUsage(initial_sz, used, committed, max_sz); |
1089 | 156 } |