1879N/A * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. 0N/A * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 0N/A * This code is free software; you can redistribute it and/or modify it 0N/A * under the terms of the GNU General Public License version 2 only, as 0N/A * published by the Free Software Foundation. 0N/A * This code is distributed in the hope that it will be useful, but WITHOUT 0N/A * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 0N/A * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 0N/A * version 2 for more details (a copy is included in the LICENSE file that 0N/A * accompanied this code). 0N/A * You should have received a copy of the GNU General Public License version 0N/A * 2 along with this work; if not, write to the Free Software Foundation, 0N/A * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 1472N/A * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 0N/A///////////////////////////////////////////////////////////////// 0N/A// Closures used by ConcurrentMarkSweepGeneration's collector 0N/A///////////////////////////////////////////////////////////////// 113N/A// Decode the oop and call do_oop on it. 0N/A// A variant of the above used in certain kinds of CMS 0N/A// marking verification. 935N/A// KlassRememberingOopClosure is used when marking of the permanent generation 935N/A// is being done. It adds fields to support revisiting of klasses 935N/A// for class unloading. _should_remember_klasses should be set to 935N/A// indicate if klasses should be remembered. Currently that is whenever 935N/A// CMS class unloading is turned on. The _revisit_stack is used 935N/A// to save the klasses for later processing. 935N/A// Similar to KlassRememberingOopClosure for use when multiple 935N/A// GC threads will execute the closure. 0N/A// The non-parallel version (the parallel version appears further below). 941N/A // In support of class unloading 941N/A // return _should_remember_klasses; 0N/A// In the parallel case, the revisit stack, the bit map and the 0N/A// reference processor are currently all shared. Access to 0N/A// these shared mutable structures must use appropriate 0N/A// synchronization (for instance, via CAS). The marking stack 0N/A// used in the non-parallel case above is here replaced with 0N/A// an OopTaskQueue structure to allow efficient work stealing. 941N/A // In support of class unloading 941N/A // return _should_remember_klasses; 0N/A// The non-parallel version (the parallel version appears further below). 0N/A // Whether closure is being used for concurrent precleaning 0N/A// Tn this, the parallel avatar of MarkRefsIntoAndScanClosure, the revisit 0N/A// stack and the bitMap are shared, so access needs to be suitably 0N/A// sycnhronized. An OopTaskQueue structure, supporting efficient 0N/A// workstealing, replaces a CMSMarkStack for storing grey objects. 935N/A // When ScanMarkedObjectsAgainClosure is used, 935N/A // it passes [Par_]MarkRefsIntoAndScanClosure to oop_oop_iterate(), 935N/A // and this delegation is used. 935N/A // See comment on should_remember_klasses() above. 0N/A// This closure is used during the concurrent marking phase 0N/A// following the first checkpoint. Its use is buried in 0N/A// the closure MarkFromRootsClosure. 941N/A // In support of class unloading 941N/A // return _should_remember_klasses; 0N/A // Deal with a stack overflow condition 0N/A// A parallel (MT) version of the above. 0N/A// This closure is used during the concurrent marking phase 0N/A// following the first checkpoint. Its use is buried in 0N/A// the closure Par_MarkFromRootsClosure. 941N/A // In support of class unloading 941N/A // return _should_remember_klasses; 0N/A // Deal with a stack overflow condition 0N/A// For objects in CMS generation, this closure marks 0N/A// This is currently used during the (weak) reference object 452N/A// processing phase of the CMS final checkpoint step, as 452N/A// well as during the concurrent precleaning of the discovered 0N/A// A parallel (MT) version of the above, used when 0N/A// reference processing is parallel; the only difference 0N/A// is in the do_oop method. 1879N/A#
endif // SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_CMSOOPCLOSURES_HPP