Android RAM页面大小?

Mas*_*imo 4 java linux android

我想优化InputStream的读取,然后我认为有一个RAM页面大小的byte []缓冲区会很好.

是否有方法(可能是静态方法)来了解它的大小?

编辑:

最后我成功使用了NDK和JNI,我在C中编写了以下代码:

#include <jni.h>
#include <unistd.h>

jlong Java_it_masmil_tests_TestsActivity_pageSize(JNIEnv* env, jobject javaThis) {
    return sysconf(_SC_PAGE_SIZE);
}
Run Code Online (Sandbox Code Playgroud)

哪里:

  • it.masmil.tests是包名
  • TestsActivity是类名
  • pageSize是方法名称
  • env和java这是两个必需参数(在某些情况下有用)

我用NDK编译了该文件,然后用Java编写了以下代码:

static {
    System.loadLibrary("clibrary");
}
private native long pageSize();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    long page = pageSize();
}
Run Code Online (Sandbox Code Playgroud)

哪里:

  • clibrary是我用NDK创建的库的名称
  • pageSize是C文件中声明的方法的名称

aus*_*len 6

页面大小由Linux(内核)定义,您可以通过调用libc(bionic)来通过JNI获取它sysconf(_SC_PAGESIZE).由于Android在Linux上运行,主要在ARM系统上运行,因此您可以假设4k页面大小.

#include <unistd.h>
long sz = sysconf(_SC_PAGESIZE);
Run Code Online (Sandbox Code Playgroud)

但是,您无法轻松地从Java/C中获得这种对齐方式.意思是即使你要求一个4k的块,没有人保证将是4k对齐.

如果你需要Linux上的4k对齐块,你应该使用mmap,保证页面大小对齐.