Java,一种固定和对齐数组的方法

时间:2015-09-24 21:31:07

标签: java arrays bytebuffer memory-alignment

我可以创建一个具有特定对齐的整数数组并停止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;
       }
  }

我认为一些急需等待的人会为他们的应用程序添加更多的速度,但不会被迫消耗更多的内存而不是填充所需的内存。

0 个答案:

没有答案