终端设备内存怎么查询(终端设备内存RAM手动填充和释放)
终端设备内存怎么查询(终端设备内存RAM手动填充和释放)现在编译so的过程就完成了,接下来就是使用so了。注意这里生成的so文件需要和第一步的加载动态库名称一致。这样就可以在Java中使用MemFillTool类实现内存的填充和释放了。
在做APP保活时,需要验证LMK场景下的APP被系统kill后,自动拉起场景;使用java语言对内存填充很麻烦,但是如果使用C就很简单,使所以这时候就需要使用JNI了。jni使用请参考博文十分钟学会 Native JNI 。
下面简单介绍一下使用C填充内存的方法,用于LMK测试,很简单,也比较实用,同时可以做为学习JNI的练习。
public class MemFillTool {
public static MemFillTool instance;
static {
System.loadLibrary("mem_fill_tool");
instance = null;
}
public static MemFillTool getInstance() {
if (instance == null)
instance = new MemFillTool();
return instance;
}
public native int fillMem(int paramInt);//内存填充
public native int freeMem();//内存释放
}
这里需要注意的是System.loadLibrary(“mem_fill_tool”);指的是后边so库文件的名称。
2、在C中添加内存填充和释放的方法//
// Created by dWX563304 on 2022/7/7.
//
#include<jni.h>
#include<stdlib.h>
#include<string.h>
#include "com_example_myapplication_MemFillTool.h"
static int *p;
JNIEXPORT jint JNICALL Java_com_example_myapplication_MemFillTool_fillMem
(JNIEnv *env jobject obj jint paramInt){
p=(int*)malloc(256*1024*paramInt*sizeof(int));
memset(p 2 1024*1024*paramInt);
return 0;
}
JNIEXPORT jint JNICALL Java_com_example_myapplication_MemFillTool_freeMem
(JNIEnv * jobject){
free(p);
p=NULL;
return 0;
}
3、生存动态库
到terminal中切换到jni目录,执行ndk-build,(这里需要配置Ndk环境变量,就是把项目中配置的NDK路径配置到PATH中去。)
ndk-buil命令结束之后,会在libs目录中出生成对应平台的so文件,这里我只配置了armeabi-v7a这一种格式。
现在编译so的过程就完成了,接下来就是使用so了。
注意这里生成的so文件需要和第一步的加载动态库名称一致。
这样就可以在Java中使用MemFillTool类实现内存的填充和释放了。