< prev index next >

src/hotspot/share/interpreter/oopMapCache.cpp

Print this page
*** 200,10 ***
--- 200,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();

*** 356,10 ***
--- 357,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;

*** 373,10 ***
--- 375,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);

*** 405,10 ***
--- 408,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 >