spark MemoryBlock 源码
spark MemoryBlock 代码
文件路径:/common/unsafe/src/main/java/org/apache/spark/unsafe/memory/MemoryBlock.java
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.spark.unsafe.memory;
import javax.annotation.Nullable;
import org.apache.spark.unsafe.Platform;
/**
* A consecutive block of memory, starting at a {@link MemoryLocation} with a fixed size.
*/
public class MemoryBlock extends MemoryLocation {
/** Special `pageNumber` value for pages which were not allocated by TaskMemoryManagers */
public static final int NO_PAGE_NUMBER = -1;
/**
* Special `pageNumber` value for marking pages that have been freed in the TaskMemoryManager.
* We set `pageNumber` to this value in TaskMemoryManager.freePage() so that MemoryAllocator
* can detect if pages which were allocated by TaskMemoryManager have been freed in the TMM
* before being passed to MemoryAllocator.free() (it is an error to allocate a page in
* TaskMemoryManager and then directly free it in a MemoryAllocator without going through
* the TMM freePage() call).
*/
public static final int FREED_IN_TMM_PAGE_NUMBER = -2;
/**
* Special `pageNumber` value for pages that have been freed by the MemoryAllocator. This allows
* us to detect double-frees.
*/
public static final int FREED_IN_ALLOCATOR_PAGE_NUMBER = -3;
private final long length;
/**
* Optional page number; used when this MemoryBlock represents a page allocated by a
* TaskMemoryManager. This field is public so that it can be modified by the TaskMemoryManager,
* which lives in a different package.
*/
public int pageNumber = NO_PAGE_NUMBER;
public MemoryBlock(@Nullable Object obj, long offset, long length) {
super(obj, offset);
this.length = length;
}
/**
* Returns the size of the memory block.
*/
public long size() {
return length;
}
/**
* Creates a memory block pointing to the memory used by the long array.
*/
public static MemoryBlock fromLongArray(final long[] array) {
return new MemoryBlock(array, Platform.LONG_ARRAY_OFFSET, array.length * 8L);
}
/**
* Fills the memory block with the specified byte value.
*/
public void fill(byte value) {
Platform.setMemory(obj, offset, length, value);
}
}
相关信息
相关文章
0
赞
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
8、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦