Wed, 23 Dec 2009 09:23:54 -0800
6631166: CMS: better heuristics when combatting fragmentation
Summary: Autonomic per-worker free block cache sizing, tunable coalition policies, fixes to per-size block statistics, retuned gain and bandwidth of some feedback loop filters to allow quicker reactivity to abrupt changes in ambient demand, and other heuristics to reduce fragmentation of the CMS old gen. Also tightened some assertions, including those related to locking.
Reviewed-by: jmasa
1 //
2 // Copyright 2004-2009 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 //
25 // NOTE: DO NOT CHANGE THIS COPYRIGHT TO NEW STYLE - IT WILL BREAK makeDeps!
27 binaryTreeDictionary.cpp allocationStats.hpp
28 binaryTreeDictionary.cpp binaryTreeDictionary.hpp
29 binaryTreeDictionary.cpp globals.hpp
30 binaryTreeDictionary.cpp ostream.hpp
31 binaryTreeDictionary.cpp space.inline.hpp
32 binaryTreeDictionary.cpp spaceDecorator.hpp
34 binaryTreeDictionary.hpp freeBlockDictionary.hpp
35 binaryTreeDictionary.hpp freeList.hpp
37 cmsAdaptiveSizePolicy.cpp cmsAdaptiveSizePolicy.hpp
38 cmsAdaptiveSizePolicy.cpp defNewGeneration.hpp
39 cmsAdaptiveSizePolicy.cpp gcStats.hpp
40 cmsAdaptiveSizePolicy.cpp genCollectedHeap.hpp
41 cmsAdaptiveSizePolicy.cpp thread.hpp
42 cmsAdaptiveSizePolicy.cpp os_<os_family>.inline.hpp
44 cmsAdaptiveSizePolicy.hpp adaptiveSizePolicy.hpp
45 cmsAdaptiveSizePolicy.hpp timer.hpp
47 cmsCollectorPolicy.cpp arguments.hpp
48 cmsCollectorPolicy.cpp cardTableRS.hpp
49 cmsCollectorPolicy.cpp cmsAdaptiveSizePolicy.hpp
50 cmsCollectorPolicy.cpp cmsGCAdaptivePolicyCounters.hpp
51 cmsCollectorPolicy.cpp cmsCollectorPolicy.hpp
52 cmsCollectorPolicy.cpp collectorPolicy.hpp
53 cmsCollectorPolicy.cpp gcLocker.inline.hpp
54 cmsCollectorPolicy.cpp genCollectedHeap.hpp
55 cmsCollectorPolicy.cpp gcPolicyCounters.hpp
56 cmsCollectorPolicy.cpp generationSpec.hpp
57 cmsCollectorPolicy.cpp globals_extension.hpp
58 cmsCollectorPolicy.cpp handles.inline.hpp
59 cmsCollectorPolicy.cpp java.hpp
60 cmsCollectorPolicy.cpp parNewGeneration.hpp
61 cmsCollectorPolicy.cpp space.hpp
62 cmsCollectorPolicy.cpp thread_<os_family>.inline.hpp
63 cmsCollectorPolicy.cpp universe.hpp
64 cmsCollectorPolicy.cpp vmGCOperations.hpp
65 cmsCollectorPolicy.cpp vmThread.hpp
67 cmsCollectorPolicy.hpp collectorPolicy.hpp
69 cmsGCAdaptivePolicyCounters.cpp cmsGCAdaptivePolicyCounters.hpp
70 cmsGCAdaptivePolicyCounters.cpp resourceArea.hpp
72 cmsGCAdaptivePolicyCounters.hpp cmsAdaptiveSizePolicy.hpp
73 cmsGCAdaptivePolicyCounters.hpp gcAdaptivePolicyCounters.hpp
74 cmsGCAdaptivePolicyCounters.hpp gcStats.hpp
75 cmsGCAdaptivePolicyCounters.hpp perfData.hpp
77 cmsLockVerifier.cpp cmsLockVerifier.hpp
78 cmsLockVerifier.cpp concurrentMarkSweepThread.hpp
79 cmsLockVerifier.cpp vmThread.hpp
81 cmsLockVerifier.hpp mutex.hpp
83 cmsOopClosures.hpp genOopClosures.hpp
85 cmsOopClosures.inline.hpp cmsOopClosures.hpp
86 cmsOopClosures.inline.hpp concurrentMarkSweepGeneration.hpp
88 cmsPermGen.cpp blockOffsetTable.hpp
89 cmsPermGen.cpp cSpaceCounters.hpp
90 cmsPermGen.cpp cmsPermGen.hpp
91 cmsPermGen.cpp collectedHeap.inline.hpp
92 cmsPermGen.cpp compactPermGen.hpp
93 cmsPermGen.cpp concurrentMarkSweepGeneration.inline.hpp
94 cmsPermGen.cpp genCollectedHeap.hpp
95 cmsPermGen.cpp generation.inline.hpp
96 cmsPermGen.cpp java.hpp
97 cmsPermGen.cpp oop.inline.hpp
98 cmsPermGen.cpp permGen.hpp
99 cmsPermGen.cpp universe.hpp
101 cmsPermGen.hpp concurrentMarkSweepGeneration.hpp
102 cmsPermGen.hpp permGen.hpp
104 compactibleFreeListSpace.cpp allocation.inline.hpp
105 compactibleFreeListSpace.cpp blockOffsetTable.inline.hpp
106 compactibleFreeListSpace.cpp cmsLockVerifier.hpp
107 compactibleFreeListSpace.cpp collectedHeap.hpp
108 compactibleFreeListSpace.cpp compactibleFreeListSpace.hpp
109 compactibleFreeListSpace.cpp concurrentMarkSweepGeneration.inline.hpp
110 compactibleFreeListSpace.cpp concurrentMarkSweepThread.hpp
111 compactibleFreeListSpace.cpp copy.hpp
112 compactibleFreeListSpace.cpp globals.hpp
113 compactibleFreeListSpace.cpp handles.inline.hpp
114 compactibleFreeListSpace.cpp init.hpp
115 compactibleFreeListSpace.cpp java.hpp
116 compactibleFreeListSpace.cpp liveRange.hpp
117 compactibleFreeListSpace.cpp oop.inline.hpp
118 compactibleFreeListSpace.cpp resourceArea.hpp
119 compactibleFreeListSpace.cpp spaceDecorator.hpp
120 compactibleFreeListSpace.cpp universe.inline.hpp
121 compactibleFreeListSpace.cpp vmThread.hpp
123 compactibleFreeListSpace.hpp binaryTreeDictionary.hpp
124 compactibleFreeListSpace.hpp freeList.hpp
125 compactibleFreeListSpace.hpp space.hpp
127 compactingPermGenGen.cpp concurrentMarkSweepGeneration.inline.hpp
129 concurrentMarkSweepGeneration.cpp cardTableRS.hpp
130 concurrentMarkSweepGeneration.cpp cmsAdaptiveSizePolicy.hpp
131 concurrentMarkSweepGeneration.cpp cmsCollectorPolicy.hpp
132 concurrentMarkSweepGeneration.cpp cmsGCAdaptivePolicyCounters.hpp
133 concurrentMarkSweepGeneration.cpp cmsOopClosures.inline.hpp
134 concurrentMarkSweepGeneration.cpp codeCache.hpp
135 concurrentMarkSweepGeneration.cpp collectedHeap.inline.hpp
136 concurrentMarkSweepGeneration.cpp collectorCounters.hpp
137 concurrentMarkSweepGeneration.cpp collectorPolicy.hpp
138 concurrentMarkSweepGeneration.cpp compactibleFreeListSpace.hpp
139 concurrentMarkSweepGeneration.cpp concurrentMarkSweepGeneration.inline.hpp
140 concurrentMarkSweepGeneration.cpp concurrentMarkSweepThread.hpp
141 concurrentMarkSweepGeneration.cpp gcLocker.inline.hpp
142 concurrentMarkSweepGeneration.cpp genCollectedHeap.hpp
143 concurrentMarkSweepGeneration.cpp genMarkSweep.hpp
144 concurrentMarkSweepGeneration.cpp genOopClosures.inline.hpp
145 concurrentMarkSweepGeneration.cpp globals_extension.hpp
146 concurrentMarkSweepGeneration.cpp handles.inline.hpp
147 concurrentMarkSweepGeneration.cpp isGCActiveMark.hpp
148 concurrentMarkSweepGeneration.cpp iterator.hpp
149 concurrentMarkSweepGeneration.cpp java.hpp
150 concurrentMarkSweepGeneration.cpp jvmtiExport.hpp
151 concurrentMarkSweepGeneration.cpp oop.inline.hpp
152 concurrentMarkSweepGeneration.cpp parNewGeneration.hpp
153 concurrentMarkSweepGeneration.cpp referencePolicy.hpp
154 concurrentMarkSweepGeneration.cpp resourceArea.hpp
155 concurrentMarkSweepGeneration.cpp runtimeService.hpp
156 concurrentMarkSweepGeneration.cpp symbolTable.hpp
157 concurrentMarkSweepGeneration.cpp systemDictionary.hpp
158 concurrentMarkSweepGeneration.cpp vmCMSOperations.hpp
159 concurrentMarkSweepGeneration.cpp vmThread.hpp
161 concurrentMarkSweepGeneration.hpp bitMap.inline.hpp
162 concurrentMarkSweepGeneration.hpp freeBlockDictionary.hpp
163 concurrentMarkSweepGeneration.hpp gSpaceCounters.hpp
164 concurrentMarkSweepGeneration.hpp gcStats.hpp
165 concurrentMarkSweepGeneration.hpp generation.hpp
166 concurrentMarkSweepGeneration.hpp generationCounters.hpp
167 concurrentMarkSweepGeneration.hpp mutexLocker.hpp
168 concurrentMarkSweepGeneration.hpp taskqueue.hpp
169 concurrentMarkSweepGeneration.hpp virtualspace.hpp
170 concurrentMarkSweepGeneration.hpp yieldingWorkgroup.hpp
172 concurrentMarkSweepGeneration.inline.hpp cmsLockVerifier.hpp
173 concurrentMarkSweepGeneration.inline.hpp compactibleFreeListSpace.hpp
174 concurrentMarkSweepGeneration.inline.hpp concurrentMarkSweepGeneration.hpp
175 concurrentMarkSweepGeneration.inline.hpp concurrentMarkSweepThread.hpp
176 concurrentMarkSweepGeneration.inline.hpp defNewGeneration.hpp
177 concurrentMarkSweepGeneration.inline.hpp gcUtil.hpp
179 concurrentMarkSweepThread.cpp concurrentMarkSweepGeneration.inline.hpp
180 concurrentMarkSweepThread.cpp concurrentMarkSweepThread.hpp
181 concurrentMarkSweepThread.cpp genCollectedHeap.hpp
182 concurrentMarkSweepThread.cpp init.hpp
183 concurrentMarkSweepThread.cpp instanceRefKlass.hpp
184 concurrentMarkSweepThread.cpp interfaceSupport.hpp
185 concurrentMarkSweepThread.cpp java.hpp
186 concurrentMarkSweepThread.cpp javaCalls.hpp
187 concurrentMarkSweepThread.cpp mutexLocker.hpp
188 concurrentMarkSweepThread.cpp oop.inline.hpp
189 concurrentMarkSweepThread.cpp os.hpp
190 concurrentMarkSweepThread.cpp systemDictionary.hpp
191 concurrentMarkSweepThread.cpp vmThread.hpp
193 concurrentMarkSweepThread.hpp concurrentGCThread.hpp
194 concurrentMarkSweepThread.hpp concurrentMarkSweepGeneration.hpp
195 concurrentMarkSweepThread.hpp thread_<os_family>.inline.hpp
197 freeBlockDictionary.cpp freeBlockDictionary.hpp
198 freeBlockDictionary.cpp thread_<os_family>.inline.hpp
200 freeBlockDictionary.hpp allocation.hpp
201 freeBlockDictionary.hpp debug.hpp
202 freeBlockDictionary.hpp freeChunk.hpp
203 freeBlockDictionary.hpp globalDefinitions.hpp
204 freeBlockDictionary.hpp memRegion.hpp
205 freeBlockDictionary.hpp mutex.hpp
206 freeBlockDictionary.hpp ostream.hpp
208 freeChunk.cpp copy.hpp
209 freeChunk.cpp freeBlockDictionary.hpp
211 freeChunk.hpp allocation.hpp
212 freeChunk.hpp debug.hpp
213 freeChunk.hpp globalDefinitions.hpp
214 freeChunk.hpp markOop.hpp
215 freeChunk.hpp memRegion.hpp
216 freeChunk.hpp mutex.hpp
217 freeChunk.hpp ostream.hpp
219 freeList.cpp freeBlockDictionary.hpp
220 freeList.cpp freeList.hpp
221 freeList.cpp globals.hpp
222 freeList.cpp mutex.hpp
223 freeList.cpp sharedHeap.hpp
224 freeList.cpp vmThread.hpp
226 freeList.hpp allocationStats.hpp
228 vmCMSOperations.cpp concurrentMarkSweepGeneration.inline.hpp
229 vmCMSOperations.cpp concurrentMarkSweepThread.hpp
230 vmCMSOperations.cpp dtrace.hpp
231 vmCMSOperations.cpp gcLocker.inline.hpp
232 vmCMSOperations.cpp isGCActiveMark.hpp
233 vmCMSOperations.cpp interfaceSupport.hpp
234 vmCMSOperations.cpp vmCMSOperations.hpp
236 vmCMSOperations.hpp concurrentMarkSweepGeneration.hpp
237 vmCMSOperations.hpp gcCause.hpp
238 vmCMSOperations.hpp vm_operations.hpp
239 vmCMSOperations.hpp vmGCOperations.hpp
241 yieldingWorkgroup.cpp yieldingWorkgroup.hpp
243 yieldingWorkgroup.hpp workgroup.hpp