Thu, 20 Nov 2008 16:56:09 -0800
6684579: SoftReference processing can be made more efficient
Summary: For current soft-ref clearing policies, we can decide at marking time if a soft-reference will definitely not be cleared, postponing the decision of whether it will definitely be cleared to the final reference processing phase. This can be especially beneficial in the case of concurrent collectors where the marking is usually concurrent but reference processing is usually not.
Reviewed-by: jmasa
1 //
2 // Copyright 2001-2008 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 objectStartArray.hpp
179 psCompactionManager.cpp oop.hpp
180 psCompactionManager.cpp oop.inline.hpp
181 psCompactionManager.cpp oop.pcgc.inline.hpp
182 psCompactionManager.cpp parallelScavengeHeap.hpp
183 psCompactionManager.cpp parMarkBitMap.hpp
184 psCompactionManager.cpp psParallelCompact.hpp
185 psCompactionManager.cpp psCompactionManager.hpp
186 psCompactionManager.cpp psOldGen.hpp
187 psCompactionManager.cpp systemDictionary.hpp
189 psCompactionManager.hpp allocation.hpp
190 psCompactionManager.hpp taskqueue.hpp
192 psGCAdaptivePolicyCounters.hpp gcAdaptivePolicyCounters.hpp
193 psGCAdaptivePolicyCounters.hpp gcPolicyCounters.hpp
194 psGCAdaptivePolicyCounters.hpp psAdaptiveSizePolicy.hpp
196 psGCAdaptivePolicyCounters.cpp arguments.hpp
197 psGCAdaptivePolicyCounters.cpp resourceArea.hpp
198 psGCAdaptivePolicyCounters.cpp psGCAdaptivePolicyCounters.hpp
200 psGenerationCounters.cpp psGenerationCounters.hpp
201 psGenerationCounters.cpp resourceArea.hpp
203 psGenerationCounters.hpp generationCounters.hpp
204 psGenerationCounters.hpp perfData.hpp
205 psGenerationCounters.hpp psVirtualspace.hpp
207 psMarkSweep.cpp psAdaptiveSizePolicy.hpp
208 psMarkSweep.cpp biasedLocking.hpp
209 psMarkSweep.cpp codeCache.hpp
210 psMarkSweep.cpp events.hpp
211 psMarkSweep.cpp fprofiler.hpp
212 psMarkSweep.cpp gcCause.hpp
213 psMarkSweep.cpp gcLocker.inline.hpp
214 psMarkSweep.cpp isGCActiveMark.hpp
215 psMarkSweep.cpp oop.inline.hpp
216 psMarkSweep.cpp memoryService.hpp
217 psMarkSweep.cpp management.hpp
218 psMarkSweep.cpp parallelScavengeHeap.hpp
219 psMarkSweep.cpp psMarkSweep.hpp
220 psMarkSweep.cpp psMarkSweepDecorator.hpp
221 psMarkSweep.cpp psOldGen.hpp
222 psMarkSweep.cpp psPermGen.hpp
223 psMarkSweep.cpp psScavenge.hpp
224 psMarkSweep.cpp psYoungGen.hpp
225 psMarkSweep.cpp referencePolicy.hpp
226 psMarkSweep.cpp referenceProcessor.hpp
227 psMarkSweep.cpp safepoint.hpp
228 psMarkSweep.cpp spaceDecorator.hpp
229 psMarkSweep.cpp symbolTable.hpp
230 psMarkSweep.cpp systemDictionary.hpp
231 psMarkSweep.cpp vmThread.hpp
233 psMarkSweep.hpp markSweep.inline.hpp
234 psMarkSweep.hpp collectorCounters.hpp
236 psMarkSweepDecorator.cpp liveRange.hpp
237 psMarkSweepDecorator.cpp markSweep.inline.hpp
238 psMarkSweepDecorator.cpp objectStartArray.hpp
239 psMarkSweepDecorator.cpp oop.inline.hpp
240 psMarkSweepDecorator.cpp parallelScavengeHeap.hpp
241 psMarkSweepDecorator.cpp psMarkSweep.hpp
242 psMarkSweepDecorator.cpp psMarkSweepDecorator.hpp
243 psMarkSweepDecorator.cpp spaceDecorator.hpp
244 psMarkSweepDecorator.cpp systemDictionary.hpp
246 psMarkSweepDecorator.hpp mutableSpace.hpp
248 psParallelCompact.cpp psAdaptiveSizePolicy.hpp
249 psParallelCompact.cpp codeCache.hpp
250 psParallelCompact.cpp events.hpp
251 psParallelCompact.cpp fprofiler.hpp
252 psParallelCompact.cpp gcCause.hpp
253 psParallelCompact.cpp gcLocker.inline.hpp
254 psParallelCompact.cpp gcTaskManager.hpp
255 psParallelCompact.cpp isGCActiveMark.hpp
256 psParallelCompact.cpp oop.inline.hpp
257 psParallelCompact.cpp oop.pcgc.inline.hpp
258 psParallelCompact.cpp memoryService.hpp
259 psParallelCompact.cpp management.hpp
260 psParallelCompact.cpp parallelScavengeHeap.inline.hpp
261 psParallelCompact.cpp pcTasks.hpp
262 psParallelCompact.cpp psMarkSweep.hpp
263 psParallelCompact.cpp psMarkSweepDecorator.hpp
264 psParallelCompact.cpp psCompactionManager.hpp
265 psParallelCompact.cpp psPromotionManager.inline.hpp
266 psParallelCompact.cpp psOldGen.hpp
267 psParallelCompact.cpp psParallelCompact.hpp
268 psParallelCompact.cpp psPermGen.hpp
269 psParallelCompact.cpp psScavenge.hpp
270 psParallelCompact.cpp psYoungGen.hpp
271 psParallelCompact.cpp referencePolicy.hpp
272 psParallelCompact.cpp referenceProcessor.hpp
273 psParallelCompact.cpp safepoint.hpp
274 psParallelCompact.cpp symbolTable.hpp
275 psParallelCompact.cpp systemDictionary.hpp
276 psParallelCompact.cpp vmThread.hpp
278 psParallelCompact.hpp collectorCounters.hpp
279 psParallelCompact.hpp markSweep.hpp
280 psParallelCompact.hpp mutableSpace.hpp
281 psParallelCompact.hpp objectStartArray.hpp
282 psParallelCompact.hpp oop.hpp
283 psParallelCompact.hpp parMarkBitMap.hpp
284 psParallelCompact.hpp psCompactionManager.hpp
285 psParallelCompact.hpp sharedHeap.hpp
287 psOldGen.cpp psAdaptiveSizePolicy.hpp
288 psOldGen.cpp cardTableModRefBS.hpp
289 psOldGen.cpp gcLocker.inline.hpp
290 psOldGen.cpp java.hpp
291 psOldGen.cpp oop.inline.hpp
292 psOldGen.cpp parallelScavengeHeap.hpp
293 psOldGen.cpp psMarkSweepDecorator.hpp
294 psOldGen.cpp psOldGen.hpp
295 psOldGen.cpp spaceDecorator.hpp
297 psOldGen.hpp psGenerationCounters.hpp
298 psOldGen.hpp mutableSpace.hpp
299 psOldGen.hpp objectStartArray.hpp
300 psOldGen.hpp psVirtualspace.hpp
301 psOldGen.hpp safepoint.hpp
302 psOldGen.hpp spaceCounters.hpp
304 psPermGen.cpp gcUtil.hpp
305 psPermGen.cpp parallelScavengeHeap.hpp
306 psPermGen.cpp psMarkSweepDecorator.hpp
307 psPermGen.cpp psParallelCompact.hpp
308 psPermGen.cpp psPermGen.hpp
310 psPermGen.hpp psOldGen.hpp
312 psPromotionManager.cpp memRegion.hpp
313 psPromotionManager.cpp mutableSpace.hpp
314 psPromotionManager.cpp oop.inline.hpp
315 psPromotionManager.cpp oop.psgc.inline.hpp
316 psPromotionManager.cpp parallelScavengeHeap.hpp
317 psPromotionManager.cpp psOldGen.hpp
318 psPromotionManager.cpp psPromotionManager.inline.hpp
319 psPromotionManager.cpp psScavenge.inline.hpp
321 psPromotionManager.hpp allocation.hpp
322 psPromotionManager.hpp prefetchQueue.hpp
323 psPromotionManager.hpp psPromotionLAB.hpp
324 psPromotionManager.hpp taskqueue.hpp
326 psPromotionManager.inline.hpp psPromotionManager.hpp
327 psPromotionManager.inline.hpp psScavenge.hpp
329 psPromotionLAB.cpp mutableSpace.hpp
330 psPromotionLAB.cpp oop.inline.hpp
331 psPromotionLAB.cpp parallelScavengeHeap.hpp
332 psPromotionLAB.cpp psPromotionLAB.hpp
334 psPromotionLAB.hpp allocation.hpp
335 psPromotionLAB.hpp objectStartArray.hpp
337 psScavenge.cpp psAdaptiveSizePolicy.hpp
338 psScavenge.cpp biasedLocking.hpp
339 psScavenge.cpp cardTableExtension.hpp
340 psScavenge.cpp fprofiler.hpp
341 psScavenge.cpp gcCause.hpp
342 psScavenge.cpp gcLocker.inline.hpp
343 psScavenge.cpp gcTaskManager.hpp
344 psScavenge.cpp handles.inline.hpp
345 psScavenge.cpp isGCActiveMark.hpp
346 psScavenge.cpp oop.inline.hpp
347 psScavenge.cpp oop.psgc.inline.hpp
348 psScavenge.cpp memoryService.hpp
349 psScavenge.cpp parallelScavengeHeap.hpp
350 psScavenge.cpp psMarkSweep.hpp
351 psScavenge.cpp psParallelCompact.hpp
352 psScavenge.cpp psScavenge.inline.hpp
353 psScavenge.cpp psTasks.hpp
354 psScavenge.cpp referencePolicy.hpp
355 psScavenge.cpp referenceProcessor.hpp
356 psScavenge.cpp resourceArea.hpp
357 psScavenge.cpp spaceDecorator.hpp
358 psScavenge.cpp threadCritical.hpp
359 psScavenge.cpp vmThread.hpp
360 psScavenge.cpp vm_operations.hpp
362 psScavenge.hpp allocation.hpp
363 psScavenge.hpp cardTableExtension.hpp
364 psScavenge.hpp collectorCounters.hpp
365 psScavenge.hpp oop.hpp
366 psScavenge.hpp psVirtualspace.hpp
368 psScavenge.inline.hpp cardTableExtension.hpp
369 psScavenge.inline.hpp parallelScavengeHeap.hpp
370 psScavenge.inline.hpp psPromotionManager.hpp
371 psScavenge.inline.hpp psScavenge.hpp
373 pcTasks.cpp collectedHeap.hpp
374 pcTasks.cpp fprofiler.hpp
375 pcTasks.cpp jniHandles.hpp
376 pcTasks.cpp jvmtiExport.hpp
377 pcTasks.cpp management.hpp
378 pcTasks.cpp psParallelCompact.hpp
379 pcTasks.cpp pcTasks.hpp
380 pcTasks.cpp oop.inline.hpp
381 pcTasks.cpp oop.pcgc.inline.hpp
382 pcTasks.cpp systemDictionary.hpp
383 pcTasks.cpp taskqueue.hpp
384 pcTasks.cpp thread.hpp
385 pcTasks.cpp universe.hpp
386 pcTasks.cpp vmThread.hpp
388 pcTasks.hpp gcTaskManager.hpp
389 pcTasks.hpp psTasks.hpp
391 psTasks.cpp cardTableExtension.hpp
392 psTasks.cpp fprofiler.hpp
393 psTasks.cpp gcTaskManager.hpp
394 psTasks.cpp iterator.hpp
395 psTasks.cpp management.hpp
396 psTasks.cpp oop.inline.hpp
397 psTasks.cpp oop.psgc.inline.hpp
398 psTasks.cpp psMarkSweep.hpp
399 psTasks.cpp psPromotionManager.hpp
400 psTasks.cpp psPromotionManager.inline.hpp
401 psTasks.cpp psScavenge.hpp
402 psTasks.cpp psTasks.hpp
403 psTasks.cpp systemDictionary.hpp
404 psTasks.cpp taskqueue.hpp
405 psTasks.cpp thread.hpp
406 psTasks.cpp universe.hpp
407 psTasks.cpp vmThread.hpp
409 psTasks.hpp allocation.hpp
410 psTasks.hpp growableArray.hpp
412 psVirtualspace.hpp virtualspace.hpp
414 psVirtualspace.cpp os.hpp
415 psVirtualspace.cpp os_<os_family>.inline.hpp
416 psVirtualspace.cpp psVirtualspace.hpp
417 psVirtualspace.cpp virtualspace.hpp
419 psYoungGen.cpp gcUtil.hpp
420 psYoungGen.cpp java.hpp
421 psYoungGen.cpp oop.inline.hpp
422 psYoungGen.cpp parallelScavengeHeap.hpp
423 psYoungGen.cpp psMarkSweepDecorator.hpp
424 psYoungGen.cpp psScavenge.hpp
425 psYoungGen.cpp psYoungGen.hpp
426 psYoungGen.cpp mutableNUMASpace.hpp
427 psYoungGen.cpp spaceDecorator.hpp
429 psYoungGen.hpp psGenerationCounters.hpp
430 psYoungGen.hpp mutableSpace.hpp
431 psYoungGen.hpp objectStartArray.hpp
432 psYoungGen.hpp spaceCounters.hpp
433 psYoungGen.hpp psVirtualspace.hpp
435 vmPSOperations.cpp dtrace.hpp
436 vmPSOperations.cpp parallelScavengeHeap.inline.hpp
437 vmPSOperations.cpp gcLocker.inline.hpp
438 vmPSOperations.cpp psMarkSweep.hpp
439 vmPSOperations.cpp psScavenge.hpp
440 vmPSOperations.cpp psScavenge.inline.hpp
441 vmPSOperations.cpp vmPSOperations.hpp
443 vmPSOperations.hpp gcCause.hpp
444 vmPSOperations.hpp parallelScavengeHeap.hpp
445 vmPSOperations.hpp vmGCOperations.hpp