我可以创建一个具有特定对齐的整数数组并停止gc移动吗?
int [] arr = stopGcAndPageAlign(new int[1024]);
or
int [] arr = pin(align(new int[1024],4096));
所以我可以使用它作为opencl程序的源使用USE_HOST_PTR(这需要页面对齐或一些大数字,如4096对齐)
当我长时间处理数组4M元素时,它具有良好对齐的高概率,但是当数组较短时,它会进行对齐并且opencl失败。
我需要一个方法来获取一个简单的java数组,然后将其固定并对齐(如在直接字节缓冲区中),而无需进入JNI。我应该将直接字节缓冲区包装为非托管java数组吗? (但这可能会更难?)
在C#中,有marshal选项,也许java有类似的东西?
我可以告诉GC停止管理并转移到某个空/对齐位置吗?
下面的代码总是可以工作吗?:
// can java move the second array right at ending of first one or starting of next page?
public class MyAlignedArrayWrapper
{
public int [] alignerArray;
public int [] alignedArray;
public MyAlignedArrayWrapper()
{
alignerArray=new int[1024*1024*32]; // forces below alignment
alignedArray=new int[113]; // so this is page aligned
// at least
}
public int[] getArray()
{
return alignedArray;
}
}
我认为一些急需等待的人会为他们的应用程序添加更多的速度,但不会被迫消耗更多的内存而不是填充所需的内存。