1.1 --- a/src/share/vm/gc_implementation/g1/bufferingOopClosure.hpp Mon Jan 20 11:47:29 2014 +0100 1.2 +++ b/src/share/vm/gc_implementation/g1/bufferingOopClosure.hpp Mon Jan 20 11:47:53 2014 +0100 1.3 @@ -98,116 +98,4 @@ 1.4 _closure_app_seconds(0.0) { } 1.5 }; 1.6 1.7 -class BufferingOopsInGenClosure: public OopsInGenClosure { 1.8 - BufferingOopClosure _boc; 1.9 - OopsInGenClosure* _oc; 1.10 - protected: 1.11 - template <class T> inline void do_oop_work(T* p) { 1.12 - assert(generation()->is_in_reserved((void*)p), "Must be in!"); 1.13 - _boc.do_oop(p); 1.14 - } 1.15 - public: 1.16 - BufferingOopsInGenClosure(OopsInGenClosure *oc) : 1.17 - _boc(oc), _oc(oc) {} 1.18 - 1.19 - virtual void do_oop(narrowOop* p) { do_oop_work(p); } 1.20 - virtual void do_oop(oop* p) { do_oop_work(p); } 1.21 - 1.22 - void done() { 1.23 - _boc.done(); 1.24 - } 1.25 - 1.26 - double closure_app_seconds () { 1.27 - return _boc.closure_app_seconds(); 1.28 - } 1.29 - 1.30 - void set_generation(Generation* gen) { 1.31 - OopsInGenClosure::set_generation(gen); 1.32 - _oc->set_generation(gen); 1.33 - } 1.34 - 1.35 - void reset_generation() { 1.36 - // Make sure we finish the current work with the current generation. 1.37 - _boc.done(); 1.38 - OopsInGenClosure::reset_generation(); 1.39 - _oc->reset_generation(); 1.40 - } 1.41 - 1.42 -}; 1.43 - 1.44 - 1.45 -class BufferingOopsInHeapRegionClosure: public OopsInHeapRegionClosure { 1.46 -private: 1.47 - enum PrivateConstants { 1.48 - BufferLength = 1024 1.49 - }; 1.50 - 1.51 - StarTask _buffer[BufferLength]; 1.52 - StarTask* _buffer_top; 1.53 - StarTask* _buffer_curr; 1.54 - 1.55 - HeapRegion* _hr_buffer[BufferLength]; 1.56 - HeapRegion** _hr_curr; 1.57 - 1.58 - OopsInHeapRegionClosure* _oc; 1.59 - double _closure_app_seconds; 1.60 - 1.61 - void process_buffer () { 1.62 - 1.63 - assert((_hr_curr - _hr_buffer) == (_buffer_curr - _buffer), 1.64 - "the two lengths should be the same"); 1.65 - 1.66 - double start = os::elapsedTime(); 1.67 - HeapRegion** hr_curr = _hr_buffer; 1.68 - HeapRegion* hr_prev = NULL; 1.69 - for (StarTask* curr = _buffer; curr < _buffer_curr; ++curr) { 1.70 - HeapRegion* region = *hr_curr; 1.71 - if (region != hr_prev) { 1.72 - _oc->set_region(region); 1.73 - hr_prev = region; 1.74 - } 1.75 - if (curr->is_narrow()) { 1.76 - assert(UseCompressedOops, "Error"); 1.77 - _oc->do_oop((narrowOop*)(*curr)); 1.78 - } else { 1.79 - _oc->do_oop((oop*)(*curr)); 1.80 - } 1.81 - ++hr_curr; 1.82 - } 1.83 - _buffer_curr = _buffer; 1.84 - _hr_curr = _hr_buffer; 1.85 - _closure_app_seconds += (os::elapsedTime() - start); 1.86 - } 1.87 - 1.88 -public: 1.89 - virtual void do_oop(narrowOop* p) { do_oop_work(p); } 1.90 - virtual void do_oop( oop* p) { do_oop_work(p); } 1.91 - 1.92 - template <class T> void do_oop_work(T* p) { 1.93 - if (_buffer_curr == _buffer_top) { 1.94 - assert(_hr_curr > _hr_buffer, "_hr_curr should be consistent with _buffer_curr"); 1.95 - process_buffer(); 1.96 - } 1.97 - StarTask new_ref(p); 1.98 - *_buffer_curr = new_ref; 1.99 - ++_buffer_curr; 1.100 - *_hr_curr = _from; 1.101 - ++_hr_curr; 1.102 - } 1.103 - void done () { 1.104 - if (_buffer_curr > _buffer) { 1.105 - assert(_hr_curr > _hr_buffer, "_hr_curr should be consistent with _buffer_curr"); 1.106 - process_buffer(); 1.107 - } 1.108 - } 1.109 - double closure_app_seconds () { 1.110 - return _closure_app_seconds; 1.111 - } 1.112 - BufferingOopsInHeapRegionClosure (OopsInHeapRegionClosure *oc) : 1.113 - _oc(oc), 1.114 - _buffer_curr(_buffer), _buffer_top(_buffer + BufferLength), 1.115 - _hr_curr(_hr_buffer), 1.116 - _closure_app_seconds(0.0) { } 1.117 -}; 1.118 - 1.119 #endif // SHARE_VM_GC_IMPLEMENTATION_G1_BUFFERINGOOPCLOSURE_HPP