< prev index next >

src/hotspot/share/gc/g1/g1BarrierSet.cpp

BarrierSetC2

16  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.                                                                     
17  *                                                                                                                                   
18  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA                                                           
19  * or visit www.oracle.com if you need additional information or have any                                                            
20  * questions.                                                                                                                        
21  *                                                                                                                                   
22  */                                                                                                                                  
23 
24 #include "precompiled.hpp"                                                                                                           
25 #include "gc/g1/g1BarrierSet.inline.hpp"                                                                                             
26 #include "gc/g1/g1BarrierSetAssembler.hpp"                                                                                           
27 #include "gc/g1/g1CardTable.inline.hpp"                                                                                              
28 #include "gc/g1/g1CollectedHeap.inline.hpp"                                                                                          
29 #include "gc/g1/g1ThreadLocalData.hpp"                                                                                               
30 #include "gc/g1/heapRegion.hpp"                                                                                                      
31 #include "gc/g1/satbMarkQueue.hpp"                                                                                                   
32 #include "logging/log.hpp"                                                                                                           
33 #include "oops/access.inline.hpp"                                                                                                    
34 #include "oops/compressedOops.inline.hpp"                                                                                            
35 #include "oops/oop.inline.hpp"                                                                                                       
                                                                                                                                     
36 #include "runtime/mutexLocker.hpp"                                                                                                   
37 #include "runtime/thread.inline.hpp"                                                                                                 
38 #include "utilities/macros.hpp"                                                                                                      
39 #ifdef COMPILER1                                                                                                                     
40 #include "gc/g1/c1/g1BarrierSetC1.hpp"                                                                                               
41 #endif                                                                                                                               
                                                                                                                                     
                                                                                                                                     
                                                                                                                                     
42 
43 class G1BarrierSetC1;                                                                                                                
                                                                                                                                     
44 
45 SATBMarkQueueSet G1BarrierSet::_satb_mark_queue_set;                                                                                 
46 DirtyCardQueueSet G1BarrierSet::_dirty_card_queue_set;                                                                               
47 
48 G1BarrierSet::G1BarrierSet(G1CardTable* card_table) :                                                                                
49   CardTableBarrierSet(make_barrier_set_assembler<G1BarrierSetAssembler>(),                                                           
50                       make_barrier_set_c1<G1BarrierSetC1>(),                                                                         
                                                                                                                                     
51                       card_table,                                                                                                    
52                       BarrierSet::FakeRtti(BarrierSet::G1BarrierSet)) {}                                                             
53 
54 void G1BarrierSet::enqueue(oop pre_val) {                                                                                            
55   // Nulls should have been already filtered.                                                                                        
56   assert(oopDesc::is_oop(pre_val, true), "Error");                                                                                   
57 
58   if (!_satb_mark_queue_set.is_active()) return;                                                                                     
59   Thread* thr = Thread::current();                                                                                                   
60   if (thr->is_Java_thread()) {                                                                                                       
61     G1ThreadLocalData::satb_mark_queue(thr).enqueue(pre_val);                                                                        
62   } else {                                                                                                                           
63     MutexLockerEx x(Shared_SATB_Q_lock, Mutex::_no_safepoint_check_flag);                                                            
64     _satb_mark_queue_set.shared_satb_queue()->enqueue(pre_val);                                                                      
65   }                                                                                                                                  
66 }                                                                                                                                    
67 
68 void G1BarrierSet::write_ref_array_pre_oop_entry(oop* dst, size_t length) {                                                          
69   G1BarrierSet *bs = barrier_set_cast<G1BarrierSet>(BarrierSet::barrier_set());                                                      

16  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
17  *
18  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
19  * or visit www.oracle.com if you need additional information or have any
20  * questions.
21  *
22  */
23 
24 #include "precompiled.hpp"
25 #include "gc/g1/g1BarrierSet.inline.hpp"
26 #include "gc/g1/g1BarrierSetAssembler.hpp"
27 #include "gc/g1/g1CardTable.inline.hpp"
28 #include "gc/g1/g1CollectedHeap.inline.hpp"
29 #include "gc/g1/g1ThreadLocalData.hpp"
30 #include "gc/g1/heapRegion.hpp"
31 #include "gc/g1/satbMarkQueue.hpp"
32 #include "logging/log.hpp"
33 #include "oops/access.inline.hpp"
34 #include "oops/compressedOops.inline.hpp"
35 #include "oops/oop.inline.hpp"
36 #include "runtime/interfaceSupport.inline.hpp"
37 #include "runtime/mutexLocker.hpp"
38 #include "runtime/thread.inline.hpp"
39 #include "utilities/macros.hpp"
40 #ifdef COMPILER1
41 #include "gc/g1/c1/g1BarrierSetC1.hpp"
42 #endif
43 #ifdef COMPILER2
44 #include "gc/g1/c2/g1BarrierSetC2.hpp"
45 #endif
46 
47 class G1BarrierSetC1;
48 class G1BarrierSetC2;
49 
50 SATBMarkQueueSet G1BarrierSet::_satb_mark_queue_set;
51 DirtyCardQueueSet G1BarrierSet::_dirty_card_queue_set;
52 
53 G1BarrierSet::G1BarrierSet(G1CardTable* card_table) :
54   CardTableBarrierSet(make_barrier_set_assembler<G1BarrierSetAssembler>(),
55                       make_barrier_set_c1<G1BarrierSetC1>(),
56                       make_barrier_set_c2<G1BarrierSetC2>(),
57                       card_table,
58                       BarrierSet::FakeRtti(BarrierSet::G1BarrierSet)) {}
59 
60 void G1BarrierSet::enqueue(oop pre_val) {
61   // Nulls should have been already filtered.
62   assert(oopDesc::is_oop(pre_val, true), "Error");
63 
64   if (!_satb_mark_queue_set.is_active()) return;
65   Thread* thr = Thread::current();
66   if (thr->is_Java_thread()) {
67     G1ThreadLocalData::satb_mark_queue(thr).enqueue(pre_val);
68   } else {
69     MutexLockerEx x(Shared_SATB_Q_lock, Mutex::_no_safepoint_check_flag);
70     _satb_mark_queue_set.shared_satb_queue()->enqueue(pre_val);
71   }
72 }
73 
74 void G1BarrierSet::write_ref_array_pre_oop_entry(oop* dst, size_t length) {
75   G1BarrierSet *bs = barrier_set_cast<G1BarrierSet>(BarrierSet::barrier_set());
< prev index next >