src/share/vm/gc_implementation/g1/bufferingOopClosure.hpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot Sdiff src/share/vm/gc_implementation/g1

src/share/vm/gc_implementation/g1/bufferingOopClosure.hpp

Print this page
rev 5732 : [mq]: comments2


  22  *
  23  */
  24 
  25 #ifndef SHARE_VM_GC_IMPLEMENTATION_G1_BUFFERINGOOPCLOSURE_HPP
  26 #define SHARE_VM_GC_IMPLEMENTATION_G1_BUFFERINGOOPCLOSURE_HPP
  27 
  28 #include "memory/genOopClosures.hpp"
  29 #include "memory/generation.hpp"
  30 #include "runtime/os.hpp"
  31 #include "utilities/taskqueue.hpp"
  32 
  33 // A BufferingOops closure tries to separate out the cost of finding roots
  34 // from the cost of applying closures to them.  It maintains an array of
  35 // ref-containing locations.  Until the array is full, applying the closure
  36 // to an oop* merely records that location in the array.  Since this
  37 // closure app cost is small, an elapsed timer can approximately attribute
  38 // all of this cost to the cost of finding the roots.  When the array fills
  39 // up, the wrapped closure is applied to all elements, keeping track of
  40 // this elapsed time of this process, and leaving the array empty.
  41 // The caller must be sure to call "done" to process any unprocessed
  42 // buffered entriess.
  43 
  44 class Generation;
  45 class HeapRegion;
  46 
  47 class BufferingOopClosure: public OopClosure {
  48 protected:
  49   enum PrivateConstants {
  50     BufferLength = 1024
  51   };
  52 
  53   StarTask  _buffer[BufferLength];
  54   StarTask* _buffer_top;
  55   StarTask* _buffer_curr;
  56 
  57   OopClosure* _oc;
  58   double      _closure_app_seconds;
  59 
  60   void process_buffer () {
  61     double start = os::elapsedTime();
  62     for (StarTask* curr = _buffer; curr < _buffer_curr; ++curr) {




  22  *
  23  */
  24 
  25 #ifndef SHARE_VM_GC_IMPLEMENTATION_G1_BUFFERINGOOPCLOSURE_HPP
  26 #define SHARE_VM_GC_IMPLEMENTATION_G1_BUFFERINGOOPCLOSURE_HPP
  27 
  28 #include "memory/genOopClosures.hpp"
  29 #include "memory/generation.hpp"
  30 #include "runtime/os.hpp"
  31 #include "utilities/taskqueue.hpp"
  32 
  33 // A BufferingOops closure tries to separate out the cost of finding roots
  34 // from the cost of applying closures to them.  It maintains an array of
  35 // ref-containing locations.  Until the array is full, applying the closure
  36 // to an oop* merely records that location in the array.  Since this
  37 // closure app cost is small, an elapsed timer can approximately attribute
  38 // all of this cost to the cost of finding the roots.  When the array fills
  39 // up, the wrapped closure is applied to all elements, keeping track of
  40 // this elapsed time of this process, and leaving the array empty.
  41 // The caller must be sure to call "done" to process any unprocessed
  42 // buffered entries.
  43 
  44 class Generation;
  45 class HeapRegion;
  46 
  47 class BufferingOopClosure: public OopClosure {
  48 protected:
  49   enum PrivateConstants {
  50     BufferLength = 1024
  51   };
  52 
  53   StarTask  _buffer[BufferLength];
  54   StarTask* _buffer_top;
  55   StarTask* _buffer_curr;
  56 
  57   OopClosure* _oc;
  58   double      _closure_app_seconds;
  59 
  60   void process_buffer () {
  61     double start = os::elapsedTime();
  62     for (StarTask* curr = _buffer; curr < _buffer_curr; ++curr) {


src/share/vm/gc_implementation/g1/bufferingOopClosure.hpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File