comparison src/share/vm/gc_implementation/g1/g1OopClosures.inline.hpp @ 1705:2d160770d2e5

6814437: G1: remove the _new_refs array Summary: The per-worker _new_refs array is used to hold references that point into the collection set. It is populated during RSet updating and subsequently processed. In the event of an evacuation failure it processed again to recreate the RSets of regions in the collection set. Remove the per-worker _new_refs array by processing the references directly. Use a DirtyCardQueue to hold the cards containing the references so that the RSets of regions in the collection set can be recreated when handling an evacuation failure. Reviewed-by: iveresov, jmasa, tonyp
author johnc
date Mon, 02 Aug 2010 12:51:43 -0700
parents c18cbe5936b8
children f95d63e2154a
comparison
equal deleted inserted replaced
1704:63f4675ac87d 1705:2d160770d2e5
1 /* 1 /*
2 * Copyright (c) 2001, 2007, Oracle and/or its affiliates. All rights reserved. 2 * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 * 4 *
5 * This code is free software; you can redistribute it and/or modify it 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 6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. 7 * published by the Free Software Foundation.
35 T heap_oop = oopDesc::load_heap_oop(p); 35 T heap_oop = oopDesc::load_heap_oop(p);
36 if (!oopDesc::is_null(heap_oop) && 36 if (!oopDesc::is_null(heap_oop) &&
37 _g1->obj_in_cs(oopDesc::decode_heap_oop_not_null(heap_oop))) { 37 _g1->obj_in_cs(oopDesc::decode_heap_oop_not_null(heap_oop))) {
38 _oc->do_oop(p); 38 _oc->do_oop(p);
39 #if FILTERINTOCSCLOSURE_DOHISTOGRAMCOUNT 39 #if FILTERINTOCSCLOSURE_DOHISTOGRAMCOUNT
40 _dcto_cl->incr_count(); 40 if (_dcto_cl != NULL)
41 _dcto_cl->incr_count();
41 #endif 42 #endif
42 } 43 }
43 } 44 }
44 45
45 #define FILTEROUTOFREGIONCLOSURE_DOHISTOGRAMCOUNT 0 46 #define FILTEROUTOFREGIONCLOSURE_DOHISTOGRAMCOUNT 0
111 if (!oopDesc::is_null(heap_oop)) { 112 if (!oopDesc::is_null(heap_oop)) {
112 oop obj = oopDesc::decode_heap_oop_not_null(heap_oop); 113 oop obj = oopDesc::decode_heap_oop_not_null(heap_oop);
113 if (_g1->in_cset_fast_test(obj)) { 114 if (_g1->in_cset_fast_test(obj)) {
114 Prefetch::write(obj->mark_addr(), 0); 115 Prefetch::write(obj->mark_addr(), 0);
115 Prefetch::read(obj->mark_addr(), (HeapWordSize*2)); 116 Prefetch::read(obj->mark_addr(), (HeapWordSize*2));
117
118 // Place on the references queue
116 _par_scan_state->push_on_queue(p); 119 _par_scan_state->push_on_queue(p);
117 } 120 }
118 } 121 }
119 } 122 }
123