code: protected void accessingRow(int r)
      {
          if (r < 0)
          {
              specific_row_cache_row = -1;
              specific_row_cache_values = null;
              return;
          }
          
          if(cacheMode == CacheMode.ROWS)
          {
              double[] cache = partialCache.get(r);
              if (cache == null)//not present
              {
                  //make a row
                  cache = new double[vecs.size()];
                  Arrays.fill(cache, Double.NaN);
  
                  double[] cache_missed = partialCache.putIfAbsentAndGet(r, cache);
                  if(cache_missed != null)
                      cache = cache_missed;
              }
              specific_row_cache_values = cache;
              specific_row_cache_row = r;
          }
      }
docs: This method allows the caller to hint that they are about to access many
  kernel values for a specific row. The row may be selected out from the
  cache into its own location to avoid excess LRU overhead. Giving a
  negative index indicates that we are done with the row, and removes it.
  This method may be called multiple times with different row values. But
  when done accessing a specific row, a negative value should be passed in.
  
  
  @param r the row to cache explicitly to avoid LRU overhead. Or a negative
  value to indicate that we are done with any specific row.