예제 #1
0
  void process_buffer () {

    assert((_hr_curr - _hr_buffer) == (_buffer_curr - _buffer),
           "the two lengths should be the same");

    double start = os::elapsedTime();
    HeapRegion** hr_curr = _hr_buffer;
    HeapRegion*  hr_prev = NULL;
    for (StarTask* curr = _buffer; curr < _buffer_curr; ++curr) {
      HeapRegion* region = *hr_curr;
      if (region != hr_prev) {
        _oc->set_region(region);
        hr_prev = region;
      }
      if (curr->is_narrow()) {
        assert(UseCompressedOops, "Error");
        _oc->do_oop((narrowOop*)(*curr));
      } else {
        _oc->do_oop((oop*)(*curr));
      }
      ++hr_curr;
    }
    _buffer_curr = _buffer;
    _hr_curr = _hr_buffer;
    _closure_app_seconds += (os::elapsedTime() - start);
  }
예제 #2
0
  void process_buffer () {

    assert((_hr_curr - _hr_buffer) == (_buffer_curr - _buffer),
           "the two lengths should be the same");

    double start = os::elapsedTime();
    HeapRegion **hr_curr = _hr_buffer;
    HeapRegion *hr_prev = NULL;
    for (oop **curr = _buffer; curr < _buffer_curr; ++curr) {
      HeapRegion *region = *hr_curr;
      if (region != hr_prev) {
        _oc->set_region(region);
        hr_prev = region;
      }
      _oc->do_oop(*curr);
      ++hr_curr;
    }
    _buffer_curr = _buffer;
    _hr_curr = _hr_buffer;
    _closure_app_seconds += (os::elapsedTime() - start);
  }
예제 #3
0
 template <class T> void do_oop_work(T* p) {
   oop obj = oopDesc::load_decode_heap_oop(p);
   if (_g1->obj_in_cs(obj)) _blk->do_oop(p);
 }