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
duke@435 | 1 | // |
xdono@1014 | 2 | // Copyright 2004-2009 Sun Microsystems, Inc. All Rights Reserved. |
duke@435 | 3 | // DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
duke@435 | 4 | // |
duke@435 | 5 | // This code is free software; you can redistribute it and/or modify it |
duke@435 | 6 | // under the terms of the GNU General Public License version 2 only, as |
duke@435 | 7 | // published by the Free Software Foundation. |
duke@435 | 8 | // |
duke@435 | 9 | // This code is distributed in the hope that it will be useful, but WITHOUT |
duke@435 | 10 | // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
duke@435 | 11 | // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
duke@435 | 12 | // version 2 for more details (a copy is included in the LICENSE file that |
duke@435 | 13 | // accompanied this code). |
duke@435 | 14 | // |
duke@435 | 15 | // You should have received a copy of the GNU General Public License version |
duke@435 | 16 | // 2 along with this work; if not, write to the Free Software Foundation, |
duke@435 | 17 | // Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
duke@435 | 18 | // |
duke@435 | 19 | // Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, |
duke@435 | 20 | // CA 95054 USA or visit www.sun.com if you need additional information or |
duke@435 | 21 | // have any questions. |
duke@435 | 22 | // |
duke@435 | 23 | // |
duke@435 | 24 | |
duke@435 | 25 | // NOTE: DO NOT CHANGE THIS COPYRIGHT TO NEW STYLE - IT WILL BREAK makeDeps! |
duke@435 | 26 | |
duke@435 | 27 | binaryTreeDictionary.cpp allocationStats.hpp |
duke@435 | 28 | binaryTreeDictionary.cpp binaryTreeDictionary.hpp |
duke@435 | 29 | binaryTreeDictionary.cpp globals.hpp |
duke@435 | 30 | binaryTreeDictionary.cpp ostream.hpp |
coleenp@963 | 31 | binaryTreeDictionary.cpp space.inline.hpp |
jmasa@698 | 32 | binaryTreeDictionary.cpp spaceDecorator.hpp |
duke@435 | 33 | |
duke@435 | 34 | binaryTreeDictionary.hpp freeBlockDictionary.hpp |
duke@435 | 35 | binaryTreeDictionary.hpp freeList.hpp |
duke@435 | 36 | |
duke@435 | 37 | cmsAdaptiveSizePolicy.cpp cmsAdaptiveSizePolicy.hpp |
duke@435 | 38 | cmsAdaptiveSizePolicy.cpp defNewGeneration.hpp |
duke@435 | 39 | cmsAdaptiveSizePolicy.cpp gcStats.hpp |
duke@435 | 40 | cmsAdaptiveSizePolicy.cpp genCollectedHeap.hpp |
duke@435 | 41 | cmsAdaptiveSizePolicy.cpp thread.hpp |
duke@435 | 42 | cmsAdaptiveSizePolicy.cpp os_<os_family>.inline.hpp |
duke@435 | 43 | |
duke@435 | 44 | cmsAdaptiveSizePolicy.hpp adaptiveSizePolicy.hpp |
duke@435 | 45 | cmsAdaptiveSizePolicy.hpp timer.hpp |
duke@435 | 46 | |
duke@435 | 47 | cmsCollectorPolicy.cpp arguments.hpp |
duke@435 | 48 | cmsCollectorPolicy.cpp cardTableRS.hpp |
duke@435 | 49 | cmsCollectorPolicy.cpp cmsAdaptiveSizePolicy.hpp |
duke@435 | 50 | cmsCollectorPolicy.cpp cmsGCAdaptivePolicyCounters.hpp |
duke@435 | 51 | cmsCollectorPolicy.cpp cmsCollectorPolicy.hpp |
duke@435 | 52 | cmsCollectorPolicy.cpp collectorPolicy.hpp |
duke@435 | 53 | cmsCollectorPolicy.cpp gcLocker.inline.hpp |
duke@435 | 54 | cmsCollectorPolicy.cpp genCollectedHeap.hpp |
duke@435 | 55 | cmsCollectorPolicy.cpp gcPolicyCounters.hpp |
duke@435 | 56 | cmsCollectorPolicy.cpp generationSpec.hpp |
duke@435 | 57 | cmsCollectorPolicy.cpp globals_extension.hpp |
duke@435 | 58 | cmsCollectorPolicy.cpp handles.inline.hpp |
duke@435 | 59 | cmsCollectorPolicy.cpp java.hpp |
duke@435 | 60 | cmsCollectorPolicy.cpp parNewGeneration.hpp |
duke@435 | 61 | cmsCollectorPolicy.cpp space.hpp |
duke@435 | 62 | cmsCollectorPolicy.cpp thread_<os_family>.inline.hpp |
duke@435 | 63 | cmsCollectorPolicy.cpp universe.hpp |
duke@435 | 64 | cmsCollectorPolicy.cpp vmGCOperations.hpp |
duke@435 | 65 | cmsCollectorPolicy.cpp vmThread.hpp |
duke@435 | 66 | |
duke@435 | 67 | cmsCollectorPolicy.hpp collectorPolicy.hpp |
duke@435 | 68 | |
duke@435 | 69 | cmsGCAdaptivePolicyCounters.cpp cmsGCAdaptivePolicyCounters.hpp |
duke@435 | 70 | cmsGCAdaptivePolicyCounters.cpp resourceArea.hpp |
duke@435 | 71 | |
duke@435 | 72 | cmsGCAdaptivePolicyCounters.hpp cmsAdaptiveSizePolicy.hpp |
duke@435 | 73 | cmsGCAdaptivePolicyCounters.hpp gcAdaptivePolicyCounters.hpp |
duke@435 | 74 | cmsGCAdaptivePolicyCounters.hpp gcStats.hpp |
duke@435 | 75 | cmsGCAdaptivePolicyCounters.hpp perfData.hpp |
duke@435 | 76 | |
duke@435 | 77 | cmsLockVerifier.cpp cmsLockVerifier.hpp |
duke@435 | 78 | cmsLockVerifier.cpp concurrentMarkSweepThread.hpp |
duke@435 | 79 | cmsLockVerifier.cpp vmThread.hpp |
duke@435 | 80 | |
duke@435 | 81 | cmsLockVerifier.hpp mutex.hpp |
duke@435 | 82 | |
duke@435 | 83 | cmsOopClosures.hpp genOopClosures.hpp |
duke@435 | 84 | |
duke@435 | 85 | cmsOopClosures.inline.hpp cmsOopClosures.hpp |
duke@435 | 86 | cmsOopClosures.inline.hpp concurrentMarkSweepGeneration.hpp |
duke@435 | 87 | |
duke@435 | 88 | cmsPermGen.cpp blockOffsetTable.hpp |
duke@435 | 89 | cmsPermGen.cpp cSpaceCounters.hpp |
duke@435 | 90 | cmsPermGen.cpp cmsPermGen.hpp |
duke@435 | 91 | cmsPermGen.cpp collectedHeap.inline.hpp |
duke@435 | 92 | cmsPermGen.cpp compactPermGen.hpp |
duke@435 | 93 | cmsPermGen.cpp concurrentMarkSweepGeneration.inline.hpp |
duke@435 | 94 | cmsPermGen.cpp genCollectedHeap.hpp |
duke@435 | 95 | cmsPermGen.cpp generation.inline.hpp |
duke@435 | 96 | cmsPermGen.cpp java.hpp |
duke@435 | 97 | cmsPermGen.cpp oop.inline.hpp |
duke@435 | 98 | cmsPermGen.cpp permGen.hpp |
duke@435 | 99 | cmsPermGen.cpp universe.hpp |
duke@435 | 100 | |
duke@435 | 101 | cmsPermGen.hpp concurrentMarkSweepGeneration.hpp |
duke@435 | 102 | cmsPermGen.hpp permGen.hpp |
duke@435 | 103 | |
duke@435 | 104 | compactibleFreeListSpace.cpp allocation.inline.hpp |
duke@435 | 105 | compactibleFreeListSpace.cpp blockOffsetTable.inline.hpp |
duke@435 | 106 | compactibleFreeListSpace.cpp cmsLockVerifier.hpp |
duke@435 | 107 | compactibleFreeListSpace.cpp collectedHeap.hpp |
duke@435 | 108 | compactibleFreeListSpace.cpp compactibleFreeListSpace.hpp |
duke@435 | 109 | compactibleFreeListSpace.cpp concurrentMarkSweepGeneration.inline.hpp |
duke@435 | 110 | compactibleFreeListSpace.cpp concurrentMarkSweepThread.hpp |
duke@435 | 111 | compactibleFreeListSpace.cpp copy.hpp |
duke@435 | 112 | compactibleFreeListSpace.cpp globals.hpp |
duke@435 | 113 | compactibleFreeListSpace.cpp handles.inline.hpp |
duke@435 | 114 | compactibleFreeListSpace.cpp init.hpp |
duke@435 | 115 | compactibleFreeListSpace.cpp java.hpp |
duke@435 | 116 | compactibleFreeListSpace.cpp liveRange.hpp |
duke@435 | 117 | compactibleFreeListSpace.cpp oop.inline.hpp |
duke@435 | 118 | compactibleFreeListSpace.cpp resourceArea.hpp |
jmasa@698 | 119 | compactibleFreeListSpace.cpp spaceDecorator.hpp |
duke@435 | 120 | compactibleFreeListSpace.cpp universe.inline.hpp |
duke@435 | 121 | compactibleFreeListSpace.cpp vmThread.hpp |
duke@435 | 122 | |
duke@435 | 123 | compactibleFreeListSpace.hpp binaryTreeDictionary.hpp |
duke@435 | 124 | compactibleFreeListSpace.hpp freeList.hpp |
duke@435 | 125 | compactibleFreeListSpace.hpp space.hpp |
duke@435 | 126 | |
duke@435 | 127 | compactingPermGenGen.cpp concurrentMarkSweepGeneration.inline.hpp |
duke@435 | 128 | |
duke@435 | 129 | concurrentMarkSweepGeneration.cpp cardTableRS.hpp |
duke@435 | 130 | concurrentMarkSweepGeneration.cpp cmsAdaptiveSizePolicy.hpp |
duke@435 | 131 | concurrentMarkSweepGeneration.cpp cmsCollectorPolicy.hpp |
duke@435 | 132 | concurrentMarkSweepGeneration.cpp cmsGCAdaptivePolicyCounters.hpp |
duke@435 | 133 | concurrentMarkSweepGeneration.cpp cmsOopClosures.inline.hpp |
duke@435 | 134 | concurrentMarkSweepGeneration.cpp codeCache.hpp |
duke@435 | 135 | concurrentMarkSweepGeneration.cpp collectedHeap.inline.hpp |
duke@435 | 136 | concurrentMarkSweepGeneration.cpp collectorCounters.hpp |
duke@435 | 137 | concurrentMarkSweepGeneration.cpp collectorPolicy.hpp |
duke@435 | 138 | concurrentMarkSweepGeneration.cpp compactibleFreeListSpace.hpp |
duke@435 | 139 | concurrentMarkSweepGeneration.cpp concurrentMarkSweepGeneration.inline.hpp |
duke@435 | 140 | concurrentMarkSweepGeneration.cpp concurrentMarkSweepThread.hpp |
duke@435 | 141 | concurrentMarkSweepGeneration.cpp gcLocker.inline.hpp |
duke@435 | 142 | concurrentMarkSweepGeneration.cpp genCollectedHeap.hpp |
duke@435 | 143 | concurrentMarkSweepGeneration.cpp genMarkSweep.hpp |
duke@435 | 144 | concurrentMarkSweepGeneration.cpp genOopClosures.inline.hpp |
duke@435 | 145 | concurrentMarkSweepGeneration.cpp globals_extension.hpp |
duke@435 | 146 | concurrentMarkSweepGeneration.cpp handles.inline.hpp |
duke@435 | 147 | concurrentMarkSweepGeneration.cpp isGCActiveMark.hpp |
jmasa@1370 | 148 | concurrentMarkSweepGeneration.cpp iterator.hpp |
duke@435 | 149 | concurrentMarkSweepGeneration.cpp java.hpp |
duke@435 | 150 | concurrentMarkSweepGeneration.cpp jvmtiExport.hpp |
duke@435 | 151 | concurrentMarkSweepGeneration.cpp oop.inline.hpp |
duke@435 | 152 | concurrentMarkSweepGeneration.cpp parNewGeneration.hpp |
duke@435 | 153 | concurrentMarkSweepGeneration.cpp referencePolicy.hpp |
duke@435 | 154 | concurrentMarkSweepGeneration.cpp resourceArea.hpp |
duke@435 | 155 | concurrentMarkSweepGeneration.cpp runtimeService.hpp |
duke@435 | 156 | concurrentMarkSweepGeneration.cpp symbolTable.hpp |
duke@435 | 157 | concurrentMarkSweepGeneration.cpp systemDictionary.hpp |
duke@435 | 158 | concurrentMarkSweepGeneration.cpp vmCMSOperations.hpp |
duke@435 | 159 | concurrentMarkSweepGeneration.cpp vmThread.hpp |
duke@435 | 160 | |
ysr@777 | 161 | concurrentMarkSweepGeneration.hpp bitMap.inline.hpp |
duke@435 | 162 | concurrentMarkSweepGeneration.hpp freeBlockDictionary.hpp |
duke@435 | 163 | concurrentMarkSweepGeneration.hpp gSpaceCounters.hpp |
duke@435 | 164 | concurrentMarkSweepGeneration.hpp gcStats.hpp |
duke@435 | 165 | concurrentMarkSweepGeneration.hpp generation.hpp |
duke@435 | 166 | concurrentMarkSweepGeneration.hpp generationCounters.hpp |
duke@435 | 167 | concurrentMarkSweepGeneration.hpp mutexLocker.hpp |
duke@435 | 168 | concurrentMarkSweepGeneration.hpp taskqueue.hpp |
duke@435 | 169 | concurrentMarkSweepGeneration.hpp virtualspace.hpp |
duke@435 | 170 | concurrentMarkSweepGeneration.hpp yieldingWorkgroup.hpp |
duke@435 | 171 | |
duke@435 | 172 | concurrentMarkSweepGeneration.inline.hpp cmsLockVerifier.hpp |
duke@435 | 173 | concurrentMarkSweepGeneration.inline.hpp compactibleFreeListSpace.hpp |
duke@435 | 174 | concurrentMarkSweepGeneration.inline.hpp concurrentMarkSweepGeneration.hpp |
duke@435 | 175 | concurrentMarkSweepGeneration.inline.hpp concurrentMarkSweepThread.hpp |
duke@435 | 176 | concurrentMarkSweepGeneration.inline.hpp defNewGeneration.hpp |
duke@435 | 177 | concurrentMarkSweepGeneration.inline.hpp gcUtil.hpp |
duke@435 | 178 | |
duke@435 | 179 | concurrentMarkSweepThread.cpp concurrentMarkSweepGeneration.inline.hpp |
duke@435 | 180 | concurrentMarkSweepThread.cpp concurrentMarkSweepThread.hpp |
duke@435 | 181 | concurrentMarkSweepThread.cpp genCollectedHeap.hpp |
duke@435 | 182 | concurrentMarkSweepThread.cpp init.hpp |
duke@435 | 183 | concurrentMarkSweepThread.cpp instanceRefKlass.hpp |
duke@435 | 184 | concurrentMarkSweepThread.cpp interfaceSupport.hpp |
duke@435 | 185 | concurrentMarkSweepThread.cpp java.hpp |
duke@435 | 186 | concurrentMarkSweepThread.cpp javaCalls.hpp |
duke@435 | 187 | concurrentMarkSweepThread.cpp mutexLocker.hpp |
duke@435 | 188 | concurrentMarkSweepThread.cpp oop.inline.hpp |
duke@435 | 189 | concurrentMarkSweepThread.cpp os.hpp |
duke@435 | 190 | concurrentMarkSweepThread.cpp systemDictionary.hpp |
duke@435 | 191 | concurrentMarkSweepThread.cpp vmThread.hpp |
duke@435 | 192 | |
duke@435 | 193 | concurrentMarkSweepThread.hpp concurrentGCThread.hpp |
duke@435 | 194 | concurrentMarkSweepThread.hpp concurrentMarkSweepGeneration.hpp |
duke@435 | 195 | concurrentMarkSweepThread.hpp thread_<os_family>.inline.hpp |
duke@435 | 196 | |
duke@435 | 197 | freeBlockDictionary.cpp freeBlockDictionary.hpp |
duke@435 | 198 | freeBlockDictionary.cpp thread_<os_family>.inline.hpp |
duke@435 | 199 | |
duke@435 | 200 | freeBlockDictionary.hpp allocation.hpp |
duke@435 | 201 | freeBlockDictionary.hpp debug.hpp |
coleenp@622 | 202 | freeBlockDictionary.hpp freeChunk.hpp |
duke@435 | 203 | freeBlockDictionary.hpp globalDefinitions.hpp |
duke@435 | 204 | freeBlockDictionary.hpp memRegion.hpp |
duke@435 | 205 | freeBlockDictionary.hpp mutex.hpp |
duke@435 | 206 | freeBlockDictionary.hpp ostream.hpp |
duke@435 | 207 | |
duke@435 | 208 | freeChunk.cpp copy.hpp |
duke@435 | 209 | freeChunk.cpp freeBlockDictionary.hpp |
duke@435 | 210 | |
coleenp@622 | 211 | freeChunk.hpp allocation.hpp |
coleenp@622 | 212 | freeChunk.hpp debug.hpp |
coleenp@622 | 213 | freeChunk.hpp globalDefinitions.hpp |
coleenp@622 | 214 | freeChunk.hpp markOop.hpp |
coleenp@622 | 215 | freeChunk.hpp memRegion.hpp |
coleenp@622 | 216 | freeChunk.hpp mutex.hpp |
coleenp@622 | 217 | freeChunk.hpp ostream.hpp |
coleenp@622 | 218 | |
duke@435 | 219 | freeList.cpp freeBlockDictionary.hpp |
duke@435 | 220 | freeList.cpp freeList.hpp |
duke@435 | 221 | freeList.cpp globals.hpp |
duke@435 | 222 | freeList.cpp mutex.hpp |
duke@435 | 223 | freeList.cpp sharedHeap.hpp |
ysr@1580 | 224 | freeList.cpp vmThread.hpp |
duke@435 | 225 | |
duke@435 | 226 | freeList.hpp allocationStats.hpp |
duke@435 | 227 | |
duke@435 | 228 | vmCMSOperations.cpp concurrentMarkSweepGeneration.inline.hpp |
duke@435 | 229 | vmCMSOperations.cpp concurrentMarkSweepThread.hpp |
duke@435 | 230 | vmCMSOperations.cpp dtrace.hpp |
duke@435 | 231 | vmCMSOperations.cpp gcLocker.inline.hpp |
duke@435 | 232 | vmCMSOperations.cpp isGCActiveMark.hpp |
duke@435 | 233 | vmCMSOperations.cpp interfaceSupport.hpp |
duke@435 | 234 | vmCMSOperations.cpp vmCMSOperations.hpp |
duke@435 | 235 | |
duke@435 | 236 | vmCMSOperations.hpp concurrentMarkSweepGeneration.hpp |
duke@435 | 237 | vmCMSOperations.hpp gcCause.hpp |
duke@435 | 238 | vmCMSOperations.hpp vm_operations.hpp |
duke@435 | 239 | vmCMSOperations.hpp vmGCOperations.hpp |
duke@435 | 240 | |
duke@435 | 241 | yieldingWorkgroup.cpp yieldingWorkgroup.hpp |
duke@435 | 242 | |
duke@435 | 243 | yieldingWorkgroup.hpp workgroup.hpp |