Mercurial > hg > truffle
annotate src/share/vm/services/g1MemoryPool.cpp @ 1293:51db1e4b379d
6932536: JSR 292 modified JDK MethodHandlesTest fails on x86_64
Summary: A modified MethodHandlesTest revealed two bugs on x86_64.
Reviewed-by: never, jrose
author | twisti |
---|---|
date | Mon, 08 Mar 2010 04:46:30 -0800 |
parents | 9118860519b6 |
children | 1316cec51b4d |
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) { | |
1094
9118860519b6
6904967: G1: some CollectionUsageThreshold tests fail
tonyp
parents:
1093
diff
changeset
|
43 return MAX2(eden_space_used(g1h), (size_t) HeapRegion::GrainBytes); |
1089 | 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) { | |
1094
9118860519b6
6904967: G1: some CollectionUsageThreshold tests fail
tonyp
parents:
1093
diff
changeset
|
57 // This should ensure that it returns a value no smaller than the |
9118860519b6
6904967: G1: some CollectionUsageThreshold tests fail
tonyp
parents:
1093
diff
changeset
|
58 // region size. Currently, eden_space_committed() guarantees that. |
1089 | 59 return eden_space_committed(g1h); |
60 } | |
61 | |
62 // See the comment at the top of g1MemoryPool.hpp | |
63 size_t G1MemoryPoolSuper::survivor_space_committed(G1CollectedHeap* g1h) { | |
1094
9118860519b6
6904967: G1: some CollectionUsageThreshold tests fail
tonyp
parents:
1093
diff
changeset
|
64 return MAX2(survivor_space_used(g1h), (size_t) HeapRegion::GrainBytes); |
1089 | 65 } |
66 | |
67 // See the comment at the top of g1MemoryPool.hpp | |
68 size_t G1MemoryPoolSuper::survivor_space_used(G1CollectedHeap* g1h) { | |
69 size_t survivor_num = g1h->g1_policy()->recorded_survivor_regions(); | |
70 size_t survivor_used = survivor_num * HeapRegion::GrainBytes; | |
71 return survivor_used; | |
72 } | |
73 | |
74 // See the comment at the top of g1MemoryPool.hpp | |
75 size_t G1MemoryPoolSuper::survivor_space_max(G1CollectedHeap* g1h) { | |
1094
9118860519b6
6904967: G1: some CollectionUsageThreshold tests fail
tonyp
parents:
1093
diff
changeset
|
76 // This should ensure that it returns a value no smaller than the |
9118860519b6
6904967: G1: some CollectionUsageThreshold tests fail
tonyp
parents:
1093
diff
changeset
|
77 // region size. Currently, survivor_space_committed() guarantees that. |
1089 | 78 return survivor_space_committed(g1h); |
79 } | |
80 | |
81 // See the comment at the top of g1MemoryPool.hpp | |
82 size_t G1MemoryPoolSuper::old_space_committed(G1CollectedHeap* g1h) { | |
83 size_t committed = overall_committed(g1h); | |
84 size_t eden_committed = eden_space_committed(g1h); | |
85 size_t survivor_committed = survivor_space_committed(g1h); | |
86 committed = subtract_up_to_zero(committed, eden_committed); | |
87 committed = subtract_up_to_zero(committed, survivor_committed); | |
1094
9118860519b6
6904967: G1: some CollectionUsageThreshold tests fail
tonyp
parents:
1093
diff
changeset
|
88 committed = MAX2(committed, (size_t) HeapRegion::GrainBytes); |
1089 | 89 return committed; |
90 } | |
91 | |
92 // See the comment at the top of g1MemoryPool.hpp | |
93 size_t G1MemoryPoolSuper::old_space_used(G1CollectedHeap* g1h) { | |
94 size_t used = overall_used(g1h); | |
95 size_t eden_used = eden_space_used(g1h); | |
96 size_t survivor_used = survivor_space_used(g1h); | |
97 used = subtract_up_to_zero(used, eden_used); | |
98 used = subtract_up_to_zero(used, survivor_used); | |
99 return used; | |
100 } | |
101 | |
102 // See the comment at the top of g1MemoryPool.hpp | |
103 size_t G1MemoryPoolSuper::old_space_max(G1CollectedHeap* g1h) { | |
1092
ed52bcc32739
6880903: G1: G1 reports incorrect Runtime.maxMemory()
tonyp
parents:
1089
diff
changeset
|
104 size_t max = overall_max(g1h); |
1089 | 105 size_t eden_max = eden_space_max(g1h); |
106 size_t survivor_max = survivor_space_max(g1h); | |
107 max = subtract_up_to_zero(max, eden_max); | |
108 max = subtract_up_to_zero(max, survivor_max); | |
1094
9118860519b6
6904967: G1: some CollectionUsageThreshold tests fail
tonyp
parents:
1093
diff
changeset
|
109 max = MAX2(max, (size_t) HeapRegion::GrainBytes); |
1089 | 110 return max; |
111 } | |
112 | |
113 G1EdenPool::G1EdenPool(G1CollectedHeap* g1h) : | |
114 G1MemoryPoolSuper(g1h, | |
115 "G1 Eden", | |
116 eden_space_committed(g1h), /* init_size */ | |
117 eden_space_max(g1h), /* max_size */ | |
118 false /* support_usage_threshold */) { | |
119 } | |
120 | |
121 MemoryUsage G1EdenPool::get_memory_usage() { | |
1092
ed52bcc32739
6880903: G1: G1 reports incorrect Runtime.maxMemory()
tonyp
parents:
1089
diff
changeset
|
122 size_t initial_sz = initial_size(); |
ed52bcc32739
6880903: G1: G1 reports incorrect Runtime.maxMemory()
tonyp
parents:
1089
diff
changeset
|
123 size_t max_sz = max_size(); |
ed52bcc32739
6880903: G1: G1 reports incorrect Runtime.maxMemory()
tonyp
parents:
1089
diff
changeset
|
124 size_t used = used_in_bytes(); |
1093
afc30fccf324
6906565: G1: deal with compilation warning in g1MemoryPool.hpp
tonyp
parents:
1092
diff
changeset
|
125 size_t committed = eden_space_committed(_g1h); |
1089 | 126 |
1092
ed52bcc32739
6880903: G1: G1 reports incorrect Runtime.maxMemory()
tonyp
parents:
1089
diff
changeset
|
127 return MemoryUsage(initial_sz, used, committed, max_sz); |
1089 | 128 } |
129 | |
130 G1SurvivorPool::G1SurvivorPool(G1CollectedHeap* g1h) : | |
131 G1MemoryPoolSuper(g1h, | |
132 "G1 Survivor", | |
133 survivor_space_committed(g1h), /* init_size */ | |
134 survivor_space_max(g1h), /* max_size */ | |
135 false /* support_usage_threshold */) { | |
136 } | |
137 | |
138 MemoryUsage G1SurvivorPool::get_memory_usage() { | |
1092
ed52bcc32739
6880903: G1: G1 reports incorrect Runtime.maxMemory()
tonyp
parents:
1089
diff
changeset
|
139 size_t initial_sz = initial_size(); |
ed52bcc32739
6880903: G1: G1 reports incorrect Runtime.maxMemory()
tonyp
parents:
1089
diff
changeset
|
140 size_t max_sz = max_size(); |
ed52bcc32739
6880903: G1: G1 reports incorrect Runtime.maxMemory()
tonyp
parents:
1089
diff
changeset
|
141 size_t used = used_in_bytes(); |
1093
afc30fccf324
6906565: G1: deal with compilation warning in g1MemoryPool.hpp
tonyp
parents:
1092
diff
changeset
|
142 size_t committed = survivor_space_committed(_g1h); |
1089 | 143 |
1092
ed52bcc32739
6880903: G1: G1 reports incorrect Runtime.maxMemory()
tonyp
parents:
1089
diff
changeset
|
144 return MemoryUsage(initial_sz, used, committed, max_sz); |
1089 | 145 } |
146 | |
147 G1OldGenPool::G1OldGenPool(G1CollectedHeap* g1h) : | |
148 G1MemoryPoolSuper(g1h, | |
149 "G1 Old Gen", | |
150 old_space_committed(g1h), /* init_size */ | |
151 old_space_max(g1h), /* max_size */ | |
152 true /* support_usage_threshold */) { | |
153 } | |
154 | |
155 MemoryUsage G1OldGenPool::get_memory_usage() { | |
1092
ed52bcc32739
6880903: G1: G1 reports incorrect Runtime.maxMemory()
tonyp
parents:
1089
diff
changeset
|
156 size_t initial_sz = initial_size(); |
ed52bcc32739
6880903: G1: G1 reports incorrect Runtime.maxMemory()
tonyp
parents:
1089
diff
changeset
|
157 size_t max_sz = max_size(); |
ed52bcc32739
6880903: G1: G1 reports incorrect Runtime.maxMemory()
tonyp
parents:
1089
diff
changeset
|
158 size_t used = used_in_bytes(); |
1093
afc30fccf324
6906565: G1: deal with compilation warning in g1MemoryPool.hpp
tonyp
parents:
1092
diff
changeset
|
159 size_t committed = old_space_committed(_g1h); |
1089 | 160 |
1092
ed52bcc32739
6880903: G1: G1 reports incorrect Runtime.maxMemory()
tonyp
parents:
1089
diff
changeset
|
161 return MemoryUsage(initial_sz, used, committed, max_sz); |
1089 | 162 } |