< prev index next >

src/hotspot/share/interpreter/oopMapCache.cpp

Print this page

        

@@ -194,10 +194,11 @@
 void InterpreterOopMap::initialize() {
   _method    = NULL;
   _mask_size = USHRT_MAX;  // This value should cause a failure quickly
   _bci       = 0;
   _expression_stack_size = 0;
+  _num_oops  = 0;
   for (int i = 0; i < N; i++) _bit_mask[i] = 0;
 }
 
 void InterpreterOopMap::iterate_oop(OffsetClosure* oop_closure) const {
   int n = number_of_entries();

@@ -348,10 +349,11 @@
   // compute bits
   int word_index = 0;
   uintptr_t value = 0;
   uintptr_t mask = 1;
 
+  _num_oops = 0;
   CellTypeState* cell = vars;
   for (int entry_index = 0; entry_index < n_entries; entry_index++, mask <<= bits_per_entry, cell++) {
     // store last word
     if (mask == 0) {
       bit_mask()[word_index++] = value;

@@ -365,10 +367,11 @@
     }
 
     // set oop bit
     if ( cell->is_reference()) {
       value |= (mask << oop_bit_number );
+      _num_oops++;
     }
 
     // set dead bit
     if (!cell->is_live()) {
       value |= (mask << dead_bit_number);

@@ -397,10 +400,11 @@
 
   set_method(from->method());
   set_bci(from->bci());
   set_mask_size(from->mask_size());
   set_expression_stack_size(from->expression_stack_size());
+  _num_oops = from->num_oops();
 
   // Is the bit mask contained in the entry?
   if (from->mask_size() <= small_mask_limit) {
     memcpy((void *)_bit_mask, (void *)from->_bit_mask,
       mask_word_size() * BytesPerWord);
< prev index next >