17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25 #include "gc/g1/g1CodeBlobClosure.hpp"
26 #include "gc/g1/g1OopClosures.hpp"
27 #include "memory/iterator.hpp"
28
29 class G1CollectedHeap;
30 class G1ParScanThreadState;
31
32 // Simple holder object for a complete set of closures used by the G1 evacuation code.
33 template <G1Mark Mark>
34 class G1SharedClosures {
35 static bool needs_strong_processing() {
36 // Request strong code root processing when G1MarkFromRoot is passed in during
37 // initial mark.
38 return Mark == G1MarkFromRoot;
39 }
40 public:
41 G1ParCopyClosure<G1BarrierNone, Mark> _oops;
42 G1ParCopyClosure<G1BarrierCLD, Mark> _oops_in_cld;
43 // We do not need (and actually should not) collect oops from nmethods into the
44 // optional collection set as we already automatically collect the corresponding
45 // nmethods in the region's strong code roots set. So set G1BarrierNoOptRoots in
46 // this closure.
47 // If these were present there would be opportunity for multiple threads to try
48 // to change this oop* at the same time. Since embedded oops are not necessarily
49 // word-aligned, this could lead to word tearing during update and crashes.
50 G1ParCopyClosure<G1BarrierNoOptRoots, Mark> _oops_in_nmethod;
51
52 G1CLDScanClosure _clds;
53 G1CodeBlobClosure _codeblobs;
54
55 G1SharedClosures(G1CollectedHeap* g1h, G1ParScanThreadState* pss, bool process_only_dirty) :
56 _oops(g1h, pss),
57 _oops_in_cld(g1h, pss),
|
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25 #include "gc/g1/g1CodeBlobClosure.hpp"
26 #include "gc/g1/g1OopClosures.hpp"
27 #include "memory/iterator.hpp"
28
29 class G1CollectedHeap;
30 class G1ParScanThreadState;
31
32 // Simple holder object for a complete set of closures used by the G1 evacuation code.
33 template <G1Mark Mark>
34 class G1SharedClosures {
35 static bool needs_strong_processing() {
36 // Request strong code root processing when G1MarkFromRoot is passed in during
37 // concurrent start.
38 return Mark == G1MarkFromRoot;
39 }
40 public:
41 G1ParCopyClosure<G1BarrierNone, Mark> _oops;
42 G1ParCopyClosure<G1BarrierCLD, Mark> _oops_in_cld;
43 // We do not need (and actually should not) collect oops from nmethods into the
44 // optional collection set as we already automatically collect the corresponding
45 // nmethods in the region's strong code roots set. So set G1BarrierNoOptRoots in
46 // this closure.
47 // If these were present there would be opportunity for multiple threads to try
48 // to change this oop* at the same time. Since embedded oops are not necessarily
49 // word-aligned, this could lead to word tearing during update and crashes.
50 G1ParCopyClosure<G1BarrierNoOptRoots, Mark> _oops_in_nmethod;
51
52 G1CLDScanClosure _clds;
53 G1CodeBlobClosure _codeblobs;
54
55 G1SharedClosures(G1CollectedHeap* g1h, G1ParScanThreadState* pss, bool process_only_dirty) :
56 _oops(g1h, pss),
57 _oops_in_cld(g1h, pss),
|