打开android studio配置文件时发生OOM错误

打开android studio配置文件时发生OOM错误,android,android-profiler,Android,Android Profiler,Android版本:8.0.0 调用file.list时,如果打开android studio profiler来监控内存,很容易出现如下错误: java.lang.OutOfMemoryError: EnsureLocalCapacity at java.io.UnixFileSystem.list0(Native Method) at java.io.UnixFileSystem.list(UnixFileSystem.java:303) at java.io.File.l

Android版本:8.0.0

调用file.list时,如果打开android studio profiler来监控内存,很容易出现如下错误:

java.lang.OutOfMemoryError: EnsureLocalCapacity
   at java.io.UnixFileSystem.list0(Native Method)
   at java.io.UnixFileSystem.list(UnixFileSystem.java:303)
   at java.io.File.list(File.java:1122)
我试图从源代码中查找问题,列表最终调用list0

file.list->UnixFileSystem.list()->UnixFileSystem\u list0

Java_java_io_UnixFileSystem_list0(JNIEnv *env, jobject this,
                              jobject file)
{
DIR *dir = NULL;
struct dirent64 *ptr;
struct dirent64 *result;
int len, maxlen;
jobjectArray rv, old;
jclass str_class;

str_class = JNU_ClassString(env);
CHECK_NULL_RETURN(str_class, NULL);


WITH_FIELD_PLATFORM_STRING(env, file, ids.path, path) {
    dir = opendir(path);
} END_PLATFORM_STRING(env, path);
if (dir == NULL) return NULL;

ptr = malloc(sizeof(struct dirent64) + (PATH_MAX + 1));
if (ptr == NULL) {
    JNU_ThrowOutOfMemoryError(env, "heap allocation failed");
    closedir(dir);
    return NULL;
}
// ...
}
而且,令人困惑的是,这里返回的字符串是“堆分配失败””,而不是“EnsureLocalCapacity”,因此我不知道“EnsureLocalCapacity”来自哪里

这是我的密码:

private static final String LINUX_CURRENT_FD_NUM = "/proc/" + Process.myPid() + "/fd";
private final File mFdFile = new File(LINUX_CURRENT_FD_NUM);

private void getFdInfo(){
  final String[] fdFileList = mFdFile.list();
}


mContext.registerActivityLifecycleCallbacks(new 
Application.ActivityLifecycleCallbacks() {

        // ...

        @Override
        public void onActivityStopped(Activity activity) {
            getFdInfo();
        }

        // ...
    });
目前,发现它是在启用探查器监控的前提下发生的。目前尚不清楚是否会出现其他情况

有几个问题:

  • 如何解决这个问题
  • 这个问题与探查器有关吗?打开探查器内存监控是否会消耗内存?要多少钱
  • 在哪里可以看到探查器内存监控的相关源代码