Wed, 03 Mar 2010 14:48:26 -0800
4396719: Mark Sweep stack overflow on deeply nested Object arrays
Summary: Use an explicit stack for object arrays and process them in chunks.
Reviewed-by: iveresov, apetrusenko
1 //
2 // Copyright 2001-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!
28 adjoiningGenerations.hpp adjoiningVirtualSpaces.hpp
29 adjoiningGenerations.hpp asPSOldGen.hpp
30 adjoiningGenerations.hpp asPSYoungGen.hpp
31 adjoiningGenerations.hpp psPermGen.hpp
33 adjoiningGenerations.cpp adjoiningGenerations.hpp
34 adjoiningGenerations.cpp adjoiningVirtualSpaces.hpp
35 adjoiningGenerations.cpp parallelScavengeHeap.hpp
36 adjoiningGenerations.cpp psPermGen.hpp
38 adjoiningVirtualSpaces.hpp psVirtualspace.hpp
40 adjoiningVirtualSpaces.cpp java.hpp
41 adjoiningVirtualSpaces.cpp adjoiningVirtualSpaces.hpp
43 asPSOldGen.hpp generationCounters.hpp
44 asPSOldGen.hpp mutableSpace.hpp
45 asPSOldGen.hpp objectStartArray.hpp
46 asPSOldGen.hpp psVirtualspace.hpp
47 asPSOldGen.hpp spaceCounters.hpp
48 asPSOldGen.hpp psOldGen.hpp
50 asPSOldGen.cpp psAdaptiveSizePolicy.hpp
51 asPSOldGen.cpp cardTableModRefBS.hpp
52 asPSOldGen.cpp java.hpp
53 asPSOldGen.cpp oop.inline.hpp
54 asPSOldGen.cpp parallelScavengeHeap.hpp
55 asPSOldGen.cpp psMarkSweepDecorator.hpp
56 asPSOldGen.cpp asPSOldGen.hpp
58 asPSYoungGen.hpp generationCounters.hpp
59 asPSYoungGen.hpp mutableSpace.hpp
60 asPSYoungGen.hpp objectStartArray.hpp
61 asPSYoungGen.hpp spaceCounters.hpp
62 asPSYoungGen.hpp psVirtualspace.hpp
63 asPSYoungGen.hpp psYoungGen.hpp
64 asPSYoungGen.hpp spaceDecorator.hpp
66 asPSYoungGen.cpp gcUtil.hpp
67 asPSYoungGen.cpp java.hpp
68 asPSYoungGen.cpp oop.inline.hpp
69 asPSYoungGen.cpp parallelScavengeHeap.hpp
70 asPSYoungGen.cpp psMarkSweepDecorator.hpp
71 asPSYoungGen.cpp psScavenge.hpp
72 asPSYoungGen.cpp asPSYoungGen.hpp
73 asPSYoungGen.cpp psYoungGen.hpp
74 asPSYoungGen.cpp spaceDecorator.hpp
76 cardTableExtension.cpp cardTableExtension.hpp
77 cardTableExtension.cpp gcTaskManager.hpp
78 cardTableExtension.cpp oop.inline.hpp
79 cardTableExtension.cpp oop.psgc.inline.hpp
80 cardTableExtension.cpp parallelScavengeHeap.hpp
81 cardTableExtension.cpp psTasks.hpp
82 cardTableExtension.cpp psYoungGen.hpp
84 cardTableExtension.hpp cardTableModRefBS.hpp
86 gcTaskManager.hpp mutex.hpp
87 gcTaskManager.hpp growableArray.hpp
89 gcTaskManager.cpp allocation.hpp
90 gcTaskManager.cpp allocation.inline.hpp
91 gcTaskManager.cpp gcTaskManager.hpp
92 gcTaskManager.cpp gcTaskThread.hpp
93 gcTaskManager.cpp mutex.hpp
94 gcTaskManager.cpp mutexLocker.hpp
96 gcTaskThread.hpp thread.hpp
98 gcTaskThread.cpp allocation.hpp
99 gcTaskThread.cpp allocation.inline.hpp
100 gcTaskThread.cpp gcTaskManager.hpp
101 gcTaskThread.cpp gcTaskThread.hpp
102 gcTaskThread.cpp handles.hpp
103 gcTaskThread.cpp handles.inline.hpp
104 gcTaskThread.cpp os.hpp
105 gcTaskThread.cpp resourceArea.hpp
106 gcTaskThread.cpp thread.hpp
108 generationSizer.hpp collectorPolicy.hpp
110 objectStartArray.cpp allocation.inline.hpp
111 objectStartArray.cpp cardTableModRefBS.hpp
112 objectStartArray.cpp java.hpp
113 objectStartArray.cpp objectStartArray.hpp
114 objectStartArray.cpp oop.inline.hpp
116 objectStartArray.hpp allocation.hpp
117 objectStartArray.hpp memRegion.hpp
118 objectStartArray.hpp oop.hpp
119 objectStartArray.hpp psVirtualspace.hpp
121 parallelScavengeHeap.cpp adjoiningGenerations.hpp
122 parallelScavengeHeap.cpp adjoiningVirtualSpaces.hpp
123 parallelScavengeHeap.cpp cardTableExtension.hpp
124 parallelScavengeHeap.cpp gcLocker.inline.hpp
125 parallelScavengeHeap.cpp gcTaskManager.hpp
126 parallelScavengeHeap.cpp generationSizer.hpp
127 parallelScavengeHeap.cpp handles.inline.hpp
128 parallelScavengeHeap.cpp java.hpp
129 parallelScavengeHeap.cpp oop.inline.hpp
130 parallelScavengeHeap.cpp parallelScavengeHeap.inline.hpp
131 parallelScavengeHeap.cpp psAdaptiveSizePolicy.hpp
132 parallelScavengeHeap.cpp psMarkSweep.hpp
133 parallelScavengeHeap.cpp psParallelCompact.hpp
134 parallelScavengeHeap.cpp psPromotionManager.hpp
135 parallelScavengeHeap.cpp psScavenge.hpp
136 parallelScavengeHeap.cpp vmThread.hpp
137 parallelScavengeHeap.cpp vmPSOperations.hpp
139 parallelScavengeHeap.inline.hpp parallelScavengeHeap.hpp
140 parallelScavengeHeap.inline.hpp psMarkSweep.hpp
141 parallelScavengeHeap.inline.hpp psParallelCompact.hpp
142 parallelScavengeHeap.inline.hpp psScavenge.hpp
144 parallelScavengeHeap.hpp collectedHeap.inline.hpp
145 parallelScavengeHeap.hpp objectStartArray.hpp
146 parallelScavengeHeap.hpp gcPolicyCounters.hpp
147 parallelScavengeHeap.hpp psGCAdaptivePolicyCounters.hpp
148 parallelScavengeHeap.hpp psOldGen.hpp
149 parallelScavengeHeap.hpp psPermGen.hpp
150 parallelScavengeHeap.hpp psYoungGen.hpp
151 parallelScavengeHeap.hpp ostream.hpp
153 parMarkBitMap.cpp bitMap.inline.hpp
154 parMarkBitMap.cpp oop.inline.hpp
155 parMarkBitMap.cpp os.hpp
156 parMarkBitMap.cpp os_<os_family>.inline.hpp
157 parMarkBitMap.cpp parMarkBitMap.hpp
158 parMarkBitMap.cpp parMarkBitMap.inline.hpp
159 parMarkBitMap.cpp psParallelCompact.hpp
161 parMarkBitMap.hpp bitMap.inline.hpp
162 parMarkBitMap.hpp psVirtualspace.hpp
164 psAdaptiveSizePolicy.cpp gcPolicyCounters.hpp
165 psAdaptiveSizePolicy.cpp gcCause.hpp
166 psAdaptiveSizePolicy.cpp psAdaptiveSizePolicy.hpp
167 psAdaptiveSizePolicy.cpp psGCAdaptivePolicyCounters.hpp
168 psAdaptiveSizePolicy.cpp psScavenge.hpp
169 psAdaptiveSizePolicy.cpp timer.hpp
170 psAdaptiveSizePolicy.cpp top.hpp
172 psAdaptiveSizePolicy.hpp gcCause.hpp
173 psAdaptiveSizePolicy.hpp gcStats.hpp
174 psAdaptiveSizePolicy.hpp gcUtil.hpp
175 psAdaptiveSizePolicy.hpp adaptiveSizePolicy.hpp
177 psCompactionManager.cpp gcTaskManager.hpp
178 psCompactionManager.cpp objArrayKlass.inline.hpp
179 psCompactionManager.cpp objectStartArray.hpp
180 psCompactionManager.cpp oop.hpp
181 psCompactionManager.cpp oop.inline.hpp
182 psCompactionManager.cpp oop.pcgc.inline.hpp
183 psCompactionManager.cpp parallelScavengeHeap.hpp
184 psCompactionManager.cpp parMarkBitMap.hpp
185 psCompactionManager.cpp psParallelCompact.hpp
186 psCompactionManager.cpp psCompactionManager.hpp
187 psCompactionManager.cpp psOldGen.hpp
188 psCompactionManager.cpp systemDictionary.hpp
190 psCompactionManager.hpp allocation.hpp
191 psCompactionManager.hpp taskqueue.hpp
193 psCompactionManager.inline.hpp psCompactionManager.hpp
194 psCompactionManager.inline.hpp psParallelCompact.hpp
196 psGCAdaptivePolicyCounters.hpp gcAdaptivePolicyCounters.hpp
197 psGCAdaptivePolicyCounters.hpp gcPolicyCounters.hpp
198 psGCAdaptivePolicyCounters.hpp psAdaptiveSizePolicy.hpp
200 psGCAdaptivePolicyCounters.cpp arguments.hpp
201 psGCAdaptivePolicyCounters.cpp resourceArea.hpp
202 psGCAdaptivePolicyCounters.cpp psGCAdaptivePolicyCounters.hpp
204 psGenerationCounters.cpp psGenerationCounters.hpp
205 psGenerationCounters.cpp resourceArea.hpp
207 psGenerationCounters.hpp generationCounters.hpp
208 psGenerationCounters.hpp perfData.hpp
209 psGenerationCounters.hpp psVirtualspace.hpp
211 psMarkSweep.cpp psAdaptiveSizePolicy.hpp
212 psMarkSweep.cpp biasedLocking.hpp
213 psMarkSweep.cpp codeCache.hpp
214 psMarkSweep.cpp events.hpp
215 psMarkSweep.cpp fprofiler.hpp
216 psMarkSweep.cpp gcCause.hpp
217 psMarkSweep.cpp gcLocker.inline.hpp
218 psMarkSweep.cpp isGCActiveMark.hpp
219 psMarkSweep.cpp oop.inline.hpp
220 psMarkSweep.cpp memoryService.hpp
221 psMarkSweep.cpp management.hpp
222 psMarkSweep.cpp parallelScavengeHeap.hpp
223 psMarkSweep.cpp psMarkSweep.hpp
224 psMarkSweep.cpp psMarkSweepDecorator.hpp
225 psMarkSweep.cpp psOldGen.hpp
226 psMarkSweep.cpp psPermGen.hpp
227 psMarkSweep.cpp psScavenge.hpp
228 psMarkSweep.cpp psYoungGen.hpp
229 psMarkSweep.cpp referencePolicy.hpp
230 psMarkSweep.cpp referenceProcessor.hpp
231 psMarkSweep.cpp safepoint.hpp
232 psMarkSweep.cpp spaceDecorator.hpp
233 psMarkSweep.cpp symbolTable.hpp
234 psMarkSweep.cpp systemDictionary.hpp
235 psMarkSweep.cpp vmThread.hpp
237 psMarkSweep.hpp markSweep.inline.hpp
238 psMarkSweep.hpp collectorCounters.hpp
240 psMarkSweepDecorator.cpp liveRange.hpp
241 psMarkSweepDecorator.cpp markSweep.inline.hpp
242 psMarkSweepDecorator.cpp objectStartArray.hpp
243 psMarkSweepDecorator.cpp oop.inline.hpp
244 psMarkSweepDecorator.cpp parallelScavengeHeap.hpp
245 psMarkSweepDecorator.cpp psMarkSweep.hpp
246 psMarkSweepDecorator.cpp psMarkSweepDecorator.hpp
247 psMarkSweepDecorator.cpp spaceDecorator.hpp
248 psMarkSweepDecorator.cpp systemDictionary.hpp
250 psMarkSweepDecorator.hpp mutableSpace.hpp
252 psParallelCompact.cpp psAdaptiveSizePolicy.hpp
253 psParallelCompact.cpp codeCache.hpp
254 psParallelCompact.cpp events.hpp
255 psParallelCompact.cpp fprofiler.hpp
256 psParallelCompact.cpp gcCause.hpp
257 psParallelCompact.cpp gcLocker.inline.hpp
258 psParallelCompact.cpp gcTaskManager.hpp
259 psParallelCompact.cpp isGCActiveMark.hpp
260 psParallelCompact.cpp management.hpp
261 psParallelCompact.cpp memoryService.hpp
262 psParallelCompact.cpp methodDataOop.hpp
263 psParallelCompact.cpp oop.inline.hpp
264 psParallelCompact.cpp oop.pcgc.inline.hpp
265 psParallelCompact.cpp parallelScavengeHeap.inline.hpp
266 psParallelCompact.cpp pcTasks.hpp
267 psParallelCompact.cpp psMarkSweep.hpp
268 psParallelCompact.cpp psMarkSweepDecorator.hpp
269 psParallelCompact.cpp psCompactionManager.hpp
270 psParallelCompact.cpp psPromotionManager.inline.hpp
271 psParallelCompact.cpp psOldGen.hpp
272 psParallelCompact.cpp psParallelCompact.hpp
273 psParallelCompact.cpp psPermGen.hpp
274 psParallelCompact.cpp psScavenge.hpp
275 psParallelCompact.cpp psYoungGen.hpp
276 psParallelCompact.cpp referencePolicy.hpp
277 psParallelCompact.cpp referenceProcessor.hpp
278 psParallelCompact.cpp safepoint.hpp
279 psParallelCompact.cpp symbolTable.hpp
280 psParallelCompact.cpp systemDictionary.hpp
281 psParallelCompact.cpp vmThread.hpp
283 psParallelCompact.hpp collectorCounters.hpp
284 psParallelCompact.hpp markSweep.hpp
285 psParallelCompact.hpp mutableSpace.hpp
286 psParallelCompact.hpp objectStartArray.hpp
287 psParallelCompact.hpp oop.hpp
288 psParallelCompact.hpp parMarkBitMap.hpp
289 psParallelCompact.hpp psCompactionManager.hpp
290 psParallelCompact.hpp sharedHeap.hpp
292 psOldGen.cpp psAdaptiveSizePolicy.hpp
293 psOldGen.cpp cardTableModRefBS.hpp
294 psOldGen.cpp gcLocker.inline.hpp
295 psOldGen.cpp java.hpp
296 psOldGen.cpp oop.inline.hpp
297 psOldGen.cpp parallelScavengeHeap.hpp
298 psOldGen.cpp psMarkSweepDecorator.hpp
299 psOldGen.cpp psOldGen.hpp
300 psOldGen.cpp spaceDecorator.hpp
302 psOldGen.hpp psGenerationCounters.hpp
303 psOldGen.hpp mutableSpace.hpp
304 psOldGen.hpp objectStartArray.hpp
305 psOldGen.hpp psVirtualspace.hpp
306 psOldGen.hpp safepoint.hpp
307 psOldGen.hpp spaceCounters.hpp
309 psPermGen.cpp gcUtil.hpp
310 psPermGen.cpp markOop.inline.hpp
311 psPermGen.cpp markSweep.inline.hpp
312 psPermGen.cpp parallelScavengeHeap.hpp
313 psPermGen.cpp psMarkSweepDecorator.hpp
314 psPermGen.cpp psParallelCompact.hpp
315 psPermGen.cpp psPermGen.hpp
317 psPermGen.hpp psOldGen.hpp
319 psPromotionManager.cpp memRegion.hpp
320 psPromotionManager.cpp mutableSpace.hpp
321 psPromotionManager.cpp oop.inline.hpp
322 psPromotionManager.cpp oop.psgc.inline.hpp
323 psPromotionManager.cpp parallelScavengeHeap.hpp
324 psPromotionManager.cpp psOldGen.hpp
325 psPromotionManager.cpp psPromotionManager.inline.hpp
326 psPromotionManager.cpp psScavenge.inline.hpp
328 psPromotionManager.hpp allocation.hpp
329 psPromotionManager.hpp prefetchQueue.hpp
330 psPromotionManager.hpp psPromotionLAB.hpp
331 psPromotionManager.hpp taskqueue.hpp
333 psPromotionManager.inline.hpp psPromotionManager.hpp
334 psPromotionManager.inline.hpp psScavenge.hpp
336 psPromotionLAB.cpp mutableSpace.hpp
337 psPromotionLAB.cpp oop.inline.hpp
338 psPromotionLAB.cpp parallelScavengeHeap.hpp
339 psPromotionLAB.cpp psPromotionLAB.hpp
341 psPromotionLAB.hpp allocation.hpp
342 psPromotionLAB.hpp objectStartArray.hpp
344 psScavenge.cpp psAdaptiveSizePolicy.hpp
345 psScavenge.cpp biasedLocking.hpp
346 psScavenge.cpp cardTableExtension.hpp
347 psScavenge.cpp fprofiler.hpp
348 psScavenge.cpp gcCause.hpp
349 psScavenge.cpp gcLocker.inline.hpp
350 psScavenge.cpp gcTaskManager.hpp
351 psScavenge.cpp handles.inline.hpp
352 psScavenge.cpp isGCActiveMark.hpp
353 psScavenge.cpp oop.inline.hpp
354 psScavenge.cpp oop.psgc.inline.hpp
355 psScavenge.cpp memoryService.hpp
356 psScavenge.cpp parallelScavengeHeap.hpp
357 psScavenge.cpp psMarkSweep.hpp
358 psScavenge.cpp psParallelCompact.hpp
359 psScavenge.cpp psScavenge.inline.hpp
360 psScavenge.cpp psTasks.hpp
361 psScavenge.cpp referencePolicy.hpp
362 psScavenge.cpp referenceProcessor.hpp
363 psScavenge.cpp resourceArea.hpp
364 psScavenge.cpp spaceDecorator.hpp
365 psScavenge.cpp threadCritical.hpp
366 psScavenge.cpp vmThread.hpp
367 psScavenge.cpp vm_operations.hpp
369 psScavenge.hpp allocation.hpp
370 psScavenge.hpp cardTableExtension.hpp
371 psScavenge.hpp collectorCounters.hpp
372 psScavenge.hpp oop.hpp
373 psScavenge.hpp psVirtualspace.hpp
375 psScavenge.inline.hpp cardTableExtension.hpp
376 psScavenge.inline.hpp parallelScavengeHeap.hpp
377 psScavenge.inline.hpp psPromotionManager.hpp
378 psScavenge.inline.hpp psScavenge.hpp
380 pcTasks.cpp codeCache.hpp
381 pcTasks.cpp collectedHeap.hpp
382 pcTasks.cpp fprofiler.hpp
383 pcTasks.cpp jniHandles.hpp
384 pcTasks.cpp jvmtiExport.hpp
385 pcTasks.cpp management.hpp
386 pcTasks.cpp objArrayKlass.inline.hpp
387 pcTasks.cpp psParallelCompact.hpp
388 pcTasks.cpp pcTasks.hpp
389 pcTasks.cpp oop.inline.hpp
390 pcTasks.cpp oop.pcgc.inline.hpp
391 pcTasks.cpp systemDictionary.hpp
392 pcTasks.cpp thread.hpp
393 pcTasks.cpp universe.hpp
394 pcTasks.cpp vmThread.hpp
396 pcTasks.hpp gcTaskManager.hpp
397 pcTasks.hpp psTasks.hpp
399 psTasks.cpp cardTableExtension.hpp
400 psTasks.cpp codeCache.hpp
401 psTasks.cpp fprofiler.hpp
402 psTasks.cpp gcTaskManager.hpp
403 psTasks.cpp iterator.hpp
404 psTasks.cpp management.hpp
405 psTasks.cpp oop.inline.hpp
406 psTasks.cpp oop.psgc.inline.hpp
407 psTasks.cpp psMarkSweep.hpp
408 psTasks.cpp psPromotionManager.hpp
409 psTasks.cpp psPromotionManager.inline.hpp
410 psTasks.cpp psScavenge.hpp
411 psTasks.cpp psTasks.hpp
412 psTasks.cpp systemDictionary.hpp
413 psTasks.cpp taskqueue.hpp
414 psTasks.cpp thread.hpp
415 psTasks.cpp universe.hpp
416 psTasks.cpp vmThread.hpp
418 psTasks.hpp allocation.hpp
419 psTasks.hpp growableArray.hpp
421 psVirtualspace.hpp virtualspace.hpp
423 psVirtualspace.cpp os.hpp
424 psVirtualspace.cpp os_<os_family>.inline.hpp
425 psVirtualspace.cpp psVirtualspace.hpp
426 psVirtualspace.cpp virtualspace.hpp
428 psYoungGen.cpp gcUtil.hpp
429 psYoungGen.cpp java.hpp
430 psYoungGen.cpp oop.inline.hpp
431 psYoungGen.cpp parallelScavengeHeap.hpp
432 psYoungGen.cpp psMarkSweepDecorator.hpp
433 psYoungGen.cpp psScavenge.hpp
434 psYoungGen.cpp psYoungGen.hpp
435 psYoungGen.cpp mutableNUMASpace.hpp
436 psYoungGen.cpp spaceDecorator.hpp
438 psYoungGen.hpp psGenerationCounters.hpp
439 psYoungGen.hpp mutableSpace.hpp
440 psYoungGen.hpp objectStartArray.hpp
441 psYoungGen.hpp spaceCounters.hpp
442 psYoungGen.hpp psVirtualspace.hpp
444 vmPSOperations.cpp dtrace.hpp
445 vmPSOperations.cpp parallelScavengeHeap.inline.hpp
446 vmPSOperations.cpp gcLocker.inline.hpp
447 vmPSOperations.cpp psMarkSweep.hpp
448 vmPSOperations.cpp psScavenge.hpp
449 vmPSOperations.cpp psScavenge.inline.hpp
450 vmPSOperations.cpp vmPSOperations.hpp
452 vmPSOperations.hpp gcCause.hpp
453 vmPSOperations.hpp parallelScavengeHeap.hpp
454 vmPSOperations.hpp vmGCOperations.hpp