code: private void append2slow( ) {
  // PUBDEV-2639 - don't die for many rows, few columns -> can be long chunks
  //    if( _sparseLen > FileVec.DFLT_CHUNK_SIZE )
  //      throw new ArrayIndexOutOfBoundsException(_sparseLen);
      assert _ds==null;
      if(_ms != null && _sparseLen > 0){
        if(_id == null) { // check for sparseness
          int nzs = _ms._nzs + (_missing != null?_missing.cardinality():0);
          int nonnas = _sparseLen - ((_missing != null)?_missing.cardinality():0);
          if((nonnas+1)*_sparseRatio < _len) {
            set_sparse(nonnas,Compress.NA);
            assert _id.length == _ms.len():"id.len = " + _id.length + ", ms.len = " + _ms.len();
            assert _sparseLen <= _len;
            return;
          } else if((nzs+1)*_sparseRatio < _len) { // note order important here
            set_sparse(nzs,Compress.ZERO);
            assert _sparseLen <= _len;
            assert _sparseLen == nzs;
            return;
          }
        } else {
          // verify we're still sufficiently sparse
          if(2*_sparseLen > _len)  cancel_sparse();
          else _id = MemoryManager.arrayCopyOf(_id, _id.length*2);
        }
        _ms.resize(_sparseLen*2);
        _xs.resize(_sparseLen*2);
      } else {
        _ms = new Mantissas(16);
        _xs = new Exponents(16);
        if (_id != null) _id = new int[16];
      }
      assert _sparseLen <= _len;
    }
docs: Slow-path append data