Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Android中释放内存?_Java_Android_Out Of Memory - Fatal编程技术网

Java 如何在Android中释放内存?

Java 如何在Android中释放内存?,java,android,out-of-memory,Java,Android,Out Of Memory,我想知道如何以编程方式在Android中释放内存,因为我的布局包含很多视图,当我进入任何活动时,应用程序停止工作,并给我一个内存不足错误 So what is the way to release Memory ? 你不能仅仅释放内存,垃圾收集器的任务是找到这个对象的引用。如果这个对象没有被使用,垃圾收集器就会启动 问题是您有一个很多嵌套视图,这会消耗大量内存,您可以最小化视图以减少堆中的内存空间,也可以在需要时动态添加视图,在不需要时删除其他视图以节省内存空间。您不能只释放内存垃圾收集器的

我想知道如何以编程方式在Android中释放内存,因为我的布局包含很多视图,当我进入任何活动时,应用程序停止工作,并给我一个内存不足错误

So what is the way to release Memory  ?

你不能仅仅释放内存,垃圾收集器的任务是找到这个对象的引用。如果这个对象没有被使用,垃圾收集器就会启动


问题是您有一个
很多嵌套视图
,这会消耗大量内存,您可以最小化视图以减少堆中的内存空间,也可以在需要时动态添加视图,在不需要时删除其他视图以节省内存空间。

您不能只释放内存垃圾收集器的任务是查找此对象的引用如果不使用该对象,垃圾收集器将启动在


问题是你有一个大量的嵌套视图,它会消耗大量内存,你可以最小化视图以减少堆中的内存空间,或者在需要时动态添加视图,在不需要时删除其他视图以节省内存空间。

安卓已经定义了如何使用它

可能的原因:

出现内存不足错误的原因有很多。其中一些是:

  • 您正在执行的某些操作持续需要大量内存,并且在某个点上超出了进程的最大堆内存限制

  • 您正在泄漏一些内存,即您没有使以前分配的对象符合垃圾收集(GC)的条件。这称为内存泄漏

  • 您正在处理大型位图,并在运行时加载所有位图。您必须非常小心地处理大型位图,一次加载不需要整个位图的大小,然后进行缩放

  • 诊断OOM的工具:

    在Android中,有一些工具可以用来查找内存泄漏,其中之一就是MAT(内存分析器工具)。这可以用作Eclipse的插件或独立工具

    让我们从安装MAT并将其与Eclipse一起使用开始,并提供一个分步指南:

  • 要启动此工具,您必须从以下位置下载此工具:
  • 启动Eclipse并运行应用程序
  • 转到DDMS并选择您的应用程序,然后单击转储HPROF文件按钮,它将要求您保存HPROF文件。将其保存在硬盘上
  • 运行下载的MAT软件包中的MemoryAnalyzer.exe文件
  • 他的MAT工具无法理解Eclipse生成的hprof文件,因此您必须使用android sdk工具文件夹中的hprof conv工具,使用以下命令对其进行转换:
  • hprof conv com.example.android.hcgallery.hprof mat.hprof

    • 现在,此文件已准备好与MAT一起使用


    还有一件事我发现Android已经定义了如何使用它

    可能的原因:

    出现内存不足错误的原因有很多。其中一些是:

  • 您正在执行的某些操作持续需要大量内存,并且在某个点上超出了进程的最大堆内存限制

  • 您正在泄漏一些内存,即您没有使以前分配的对象符合垃圾收集(GC)的条件。这称为内存泄漏

  • 您正在处理大型位图,并在运行时加载所有位图。您必须非常小心地处理大型位图,一次加载不需要整个位图的大小,然后进行缩放

  • 诊断OOM的工具:

    在Android中,有一些工具可以用来查找内存泄漏,其中之一就是MAT(内存分析器工具)。这可以用作Eclipse的插件或独立工具

    让我们从安装MAT并将其与Eclipse一起使用开始,并提供一个分步指南:

  • 要启动此工具,您必须从以下位置下载此工具:
  • 启动Eclipse并运行应用程序
  • 转到DDMS并选择您的应用程序,然后单击转储HPROF文件按钮,它将要求您保存HPROF文件。将其保存在硬盘上
  • 运行下载的MAT软件包中的MemoryAnalyzer.exe文件
  • 他的MAT工具无法理解Eclipse生成的hprof文件,因此您必须使用android sdk工具文件夹中的hprof conv工具,使用以下命令对其进行转换:
  • hprof conv com.example.android.hcgallery.hprof mat.hprof

    • 现在,此文件已准备好与MAT一起使用


    还有一件事我发现我使用了这个onBackPressed事件,它完全释放了我的应用程序进程:

    android.os.Process.killProcess(android.os.Process.myPid());
    

    希望它有帮助

    我使用这个onBackPressed事件,它完全释放了我的应用程序流程:

    android.os.Process.killProcess(android.os.Process.myPid());
    

    希望它有帮助

    当我转到另一页或按“上一步”按钮时,没有办法做到这一点。@user3896367,正如我所说,最小化了在一个布局中使用视图以避免内存不足。@user3896367这是在您更改活动或重新启动活动时发生的。要了解更多信息,请点击这里@user3896367强制垃圾收集是被禁止的!当我转到另一页或按“上一步”按钮时,是否有办法做到这一点。@user3896367,如我所说,最小化了在一个布局中使用视图以避免内存不足。@user3896367这是在您更改活动或重新启动活动时发生的。要了解更多信息,请点击这里@user3896367强制垃圾收集是被禁止的!你接受的答案被否决是有充分理由的,这是一种可怕的做法。在没有看到代码的情况下,很难说你的记忆问题是从哪里来的,但Mehul Patel的答案是诊断的一个良好开端。你不应该求助于黑客来管理内存,而应该重构你的代码以提高内存效率