Mercurial > hg > graal-compiler
annotate src/share/vm/services/g1MemoryPool.cpp @ 1754:e967bad2a9ab
6941275: G1: The MemoryPools are incorrectly supported for G1
Summary: The way we were caluclating the max value meant that it might fluctuate during the run and this broke some assumptions inside the MBeans framework. This change sets the max value of each pool to -1, which means undefined according to the spec.
Reviewed-by: mchung, johnc
author | tonyp |
---|---|
date | Wed, 25 Aug 2010 08:44:58 -0400 |
parents | c18cbe5936b8 |
children | f95d63e2154a |
rev | line source |
---|---|
1089 | 1 /* |
1552
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
1394
diff
changeset
|
2 * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. |
1089 | 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 * | |
1552
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
1394
diff
changeset
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
1394
diff
changeset
|
20 * or visit www.oracle.com if you need additional information or have any |
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
1394
diff
changeset
|
21 * questions. |
1089 | 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 bool support_usage_threshold) : | |
32 _g1h(g1h), CollectedMemoryPool(name, | |
33 MemoryPool::Heap, | |
34 init_size, | |
1754
e967bad2a9ab
6941275: G1: The MemoryPools are incorrectly supported for G1
tonyp
parents:
1552
diff
changeset
|
35 undefined_max(), |
1089 | 36 support_usage_threshold) { |
37 assert(UseG1GC, "sanity"); | |
38 } | |
39 | |
40 // See the comment at the top of g1MemoryPool.hpp | |
41 size_t G1MemoryPoolSuper::eden_space_committed(G1CollectedHeap* g1h) { | |
1094
9118860519b6
6904967: G1: some CollectionUsageThreshold tests fail
tonyp
parents:
1093
diff
changeset
|
42 return MAX2(eden_space_used(g1h), (size_t) HeapRegion::GrainBytes); |
1089 | 43 } |
44 | |
45 // See the comment at the top of g1MemoryPool.hpp | |
46 size_t G1MemoryPoolSuper::eden_space_used(G1CollectedHeap* g1h) { | |
1394
1316cec51b4d
6819061: G1: eliminate serial Other times that are proportional to the collection set length
johnc
parents:
1094
diff
changeset
|
47 size_t young_list_length = g1h->young_list()->length(); |
1089 | 48 size_t eden_used = young_list_length * HeapRegion::GrainBytes; |
49 size_t survivor_used = survivor_space_used(g1h); | |
50 eden_used = subtract_up_to_zero(eden_used, survivor_used); | |
51 return eden_used; | |
52 } | |
53 | |
54 // See the comment at the top of g1MemoryPool.hpp | |
55 size_t G1MemoryPoolSuper::survivor_space_committed(G1CollectedHeap* g1h) { | |
1094
9118860519b6
6904967: G1: some CollectionUsageThreshold tests fail
tonyp
parents:
1093
diff
changeset
|
56 return MAX2(survivor_space_used(g1h), (size_t) HeapRegion::GrainBytes); |
1089 | 57 } |
58 | |
59 // See the comment at the top of g1MemoryPool.hpp | |
60 size_t G1MemoryPoolSuper::survivor_space_used(G1CollectedHeap* g1h) { | |
61 size_t survivor_num = g1h->g1_policy()->recorded_survivor_regions(); | |
62 size_t survivor_used = survivor_num * HeapRegion::GrainBytes; | |
63 return survivor_used; | |
64 } | |
65 | |
66 // See the comment at the top of g1MemoryPool.hpp | |
67 size_t G1MemoryPoolSuper::old_space_committed(G1CollectedHeap* g1h) { | |
68 size_t committed = overall_committed(g1h); | |
69 size_t eden_committed = eden_space_committed(g1h); | |
70 size_t survivor_committed = survivor_space_committed(g1h); | |
71 committed = subtract_up_to_zero(committed, eden_committed); | |
72 committed = subtract_up_to_zero(committed, survivor_committed); | |
1094
9118860519b6
6904967: G1: some CollectionUsageThreshold tests fail
tonyp
parents:
1093
diff
changeset
|
73 committed = MAX2(committed, (size_t) HeapRegion::GrainBytes); |
1089 | 74 return committed; |
75 } | |
76 | |
77 // See the comment at the top of g1MemoryPool.hpp | |
78 size_t G1MemoryPoolSuper::old_space_used(G1CollectedHeap* g1h) { | |
79 size_t used = overall_used(g1h); | |
80 size_t eden_used = eden_space_used(g1h); | |
81 size_t survivor_used = survivor_space_used(g1h); | |
82 used = subtract_up_to_zero(used, eden_used); | |
83 used = subtract_up_to_zero(used, survivor_used); | |
84 return used; | |
85 } | |
86 | |
87 G1EdenPool::G1EdenPool(G1CollectedHeap* g1h) : | |
88 G1MemoryPoolSuper(g1h, | |
89 "G1 Eden", | |
90 eden_space_committed(g1h), /* init_size */ | |
1754
e967bad2a9ab
6941275: G1: The MemoryPools are incorrectly supported for G1
tonyp
parents:
1552
diff
changeset
|
91 false /* support_usage_threshold */) { } |
1089 | 92 |
93 MemoryUsage G1EdenPool::get_memory_usage() { | |
1092
ed52bcc32739
6880903: G1: G1 reports incorrect Runtime.maxMemory()
tonyp
parents:
1089
diff
changeset
|
94 size_t initial_sz = initial_size(); |
ed52bcc32739
6880903: G1: G1 reports incorrect Runtime.maxMemory()
tonyp
parents:
1089
diff
changeset
|
95 size_t max_sz = max_size(); |
ed52bcc32739
6880903: G1: G1 reports incorrect Runtime.maxMemory()
tonyp
parents:
1089
diff
changeset
|
96 size_t used = used_in_bytes(); |
1093
afc30fccf324
6906565: G1: deal with compilation warning in g1MemoryPool.hpp
tonyp
parents:
1092
diff
changeset
|
97 size_t committed = eden_space_committed(_g1h); |
1089 | 98 |
1092
ed52bcc32739
6880903: G1: G1 reports incorrect Runtime.maxMemory()
tonyp
parents:
1089
diff
changeset
|
99 return MemoryUsage(initial_sz, used, committed, max_sz); |
1089 | 100 } |
101 | |
102 G1SurvivorPool::G1SurvivorPool(G1CollectedHeap* g1h) : | |
103 G1MemoryPoolSuper(g1h, | |
104 "G1 Survivor", | |
105 survivor_space_committed(g1h), /* init_size */ | |
1754
e967bad2a9ab
6941275: G1: The MemoryPools are incorrectly supported for G1
tonyp
parents:
1552
diff
changeset
|
106 false /* support_usage_threshold */) { } |
1089 | 107 |
108 MemoryUsage G1SurvivorPool::get_memory_usage() { | |
1092
ed52bcc32739
6880903: G1: G1 reports incorrect Runtime.maxMemory()
tonyp
parents:
1089
diff
changeset
|
109 size_t initial_sz = initial_size(); |
ed52bcc32739
6880903: G1: G1 reports incorrect Runtime.maxMemory()
tonyp
parents:
1089
diff
changeset
|
110 size_t max_sz = max_size(); |
ed52bcc32739
6880903: G1: G1 reports incorrect Runtime.maxMemory()
tonyp
parents:
1089
diff
changeset
|
111 size_t used = used_in_bytes(); |
1093
afc30fccf324
6906565: G1: deal with compilation warning in g1MemoryPool.hpp
tonyp
parents:
1092
diff
changeset
|
112 size_t committed = survivor_space_committed(_g1h); |
1089 | 113 |
1092
ed52bcc32739
6880903: G1: G1 reports incorrect Runtime.maxMemory()
tonyp
parents:
1089
diff
changeset
|
114 return MemoryUsage(initial_sz, used, committed, max_sz); |
1089 | 115 } |
116 | |
117 G1OldGenPool::G1OldGenPool(G1CollectedHeap* g1h) : | |
118 G1MemoryPoolSuper(g1h, | |
119 "G1 Old Gen", | |
120 old_space_committed(g1h), /* init_size */ | |
1754
e967bad2a9ab
6941275: G1: The MemoryPools are incorrectly supported for G1
tonyp
parents:
1552
diff
changeset
|
121 true /* support_usage_threshold */) { } |
1089 | 122 |
123 MemoryUsage G1OldGenPool::get_memory_usage() { | |
1092
ed52bcc32739
6880903: G1: G1 reports incorrect Runtime.maxMemory()
tonyp
parents:
1089
diff
changeset
|
124 size_t initial_sz = initial_size(); |
ed52bcc32739
6880903: G1: G1 reports incorrect Runtime.maxMemory()
tonyp
parents:
1089
diff
changeset
|
125 size_t max_sz = max_size(); |
ed52bcc32739
6880903: G1: G1 reports incorrect Runtime.maxMemory()
tonyp
parents:
1089
diff
changeset
|
126 size_t used = used_in_bytes(); |
1093
afc30fccf324
6906565: G1: deal with compilation warning in g1MemoryPool.hpp
tonyp
parents:
1092
diff
changeset
|
127 size_t committed = old_space_committed(_g1h); |
1089 | 128 |
1092
ed52bcc32739
6880903: G1: G1 reports incorrect Runtime.maxMemory()
tonyp
parents:
1089
diff
changeset
|
129 return MemoryUsage(initial_sz, used, committed, max_sz); |
1089 | 130 } |