spark core 2.0 LongArray

来源:互联网 发布:ubuntu 优麒麟 编辑:程序博客网 时间:2024/06/07 06:50

LongArray is an array of long values. Compared with native JVM arrays, this:

1. supports using both in-heap and off-heap memory.

2. has no bound checking, and thus can crash the JVM process when assert is turned off.


The main fields and constructor of LongArray

// This is a long so that we perform long multiplications when computing offsets.  private static final long WIDTH = 8;  private final MemoryBlock memory;  private final Object baseObj;  private final long baseOffset;  private final long length;  public LongArray(MemoryBlock memory) {    assert memory.size() < (long) Integer.MAX_VALUE * 8: "Array size > 4 billion elements";    this.memory = memory;    this.baseObj = memory.getBaseObject();    this.baseOffset = memory.getBaseOffset();    this.length = memory.size() / WIDTH;  }

The set and get method, note that the position the combination of  baseOffset and index * WIDTH.

/**   * Sets the value at position {@code index}.   */  public void set(int index, long value) {    assert index >= 0 : "index (" + index + ") should >= 0";    assert index < length : "index (" + index + ") should < length (" + length + ")";    Platform.putLong(baseObj, baseOffset + index * WIDTH, value);  }  /**   * Returns the value at position {@code index}.   */  public long get(int index) {    assert index >= 0 : "index (" + index + ") should >= 0";    assert index < length : "index (" + index + ") should < length (" + length + ")";    return Platform.getLong(baseObj, baseOffset + index * WIDTH);  }


1 0
原创粉丝点击