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)
哪里:
我用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)
哪里:
页面大小由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,保证页面大小对齐.
| 归档时间: |
|
| 查看次数: |
4207 次 |
| 最近记录: |