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) {
|
|
99 size_t max = g1h->g1_reserved_obj_bytes();
|
|
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() {
|
|
116 size_t maxSize = max_size();
|
|
117 size_t used = used_in_bytes();
|
|
118 size_t committed = eden_space_committed();
|
|
119
|
|
120 return MemoryUsage(initial_size(), used, committed, maxSize);
|
|
121 }
|
|
122
|
|
123 G1SurvivorPool::G1SurvivorPool(G1CollectedHeap* g1h) :
|
|
124 G1MemoryPoolSuper(g1h,
|
|
125 "G1 Survivor",
|
|
126 survivor_space_committed(g1h), /* init_size */
|
|
127 survivor_space_max(g1h), /* max_size */
|
|
128 false /* support_usage_threshold */) {
|
|
129 }
|
|
130
|
|
131 MemoryUsage G1SurvivorPool::get_memory_usage() {
|
|
132 size_t maxSize = max_size();
|
|
133 size_t used = used_in_bytes();
|
|
134 size_t committed = survivor_space_committed();
|
|
135
|
|
136 return MemoryUsage(initial_size(), used, committed, maxSize);
|
|
137 }
|
|
138
|
|
139 G1OldGenPool::G1OldGenPool(G1CollectedHeap* g1h) :
|
|
140 G1MemoryPoolSuper(g1h,
|
|
141 "G1 Old Gen",
|
|
142 old_space_committed(g1h), /* init_size */
|
|
143 old_space_max(g1h), /* max_size */
|
|
144 true /* support_usage_threshold */) {
|
|
145 }
|
|
146
|
|
147 MemoryUsage G1OldGenPool::get_memory_usage() {
|
|
148 size_t maxSize = max_size();
|
|
149 size_t used = used_in_bytes();
|
|
150 size_t committed = old_space_committed();
|
|
151
|
|
152 return MemoryUsage(initial_size(), used, committed, maxSize);
|
|
153 }
|