android – 为什么Memory Profiler中的“Code”和“Native”部分使用了太多的内存,我该如何减少它?

android – 为什么Memory Profiler中的“Code”和“Native”部分使用了太多的内存,我该如何减少它?,第1张

概述当用户第一次打开它时,我的应用程序使用75MB内存. 我使用Android Studio中的Android Profiler工具来检查我的Android应用程序的内存使用情况.当主屏幕打开时,应用程序开始使用75MB内存,即使主活动没有创建任何需要太多内存的对象.没有位图或任何大数组等. 40MB来自“代码”部分,19MB来自“本机”,我们不在此活动中加载任何本机库.我们在用户打开另一个Activ 当用户第一次打开它时,我的应用程序使用75MB内存.

我使用Android Studio中的AndroID Profiler工具来检查我的AndroID应用程序的内存使用情况.当主屏幕打开时,应用程序开始使用75MB内存,即使主活动没有创建任何需要太多内存的对象.没有位图或任何大数组等.

40MB来自“代码”部分,19MB来自“本机”,我们不在此活动中加载任何本机库.我们在用户打开另一个Activity之后加载.
我试图减少内存使用量,我想知道如何从“代码”和“本机”部分减少.

AndroID Profiler的屏幕截图

解决方法 关于本机内存使用:

>即使您的应用中有0个本机代码,AndroID框架也可以使用本机内存,请参阅“native”here以供参考.例如,我只是尝试创建一个示例项目,只有一个Activity有一个button,本机内存使用量是18mb,如果我触发垃圾收集它会降到8mb.要在AndroID Studio中手动触发垃圾回收,您可以单击内存概要分析器窗口左上角的“垃圾箱”图标.不要对那个按钮感到害羞,我通常必须连续多次按它才能看到内存使用量下降.
>也可以从Java分配本机内存,而无需使用ByteBuffer.allocateDirect(int)加载任何本机库.
>如果您说在下一个Activity之前没有加载任何本机库,如果您正在静态加载库(在static {}内),则无法保证在第二个Activity启动时实际加载库.它很可能会在之前被加载.如果要检查库实际加载的时间,可以尝试将此方法添加到C代码中,应该在加载库时调用它.它太脏了,但是,嘿,它的工作原理.您可能会记录某些内容而不是崩溃.

__attribute __((constructor))voID init(voID){
int a = *(int *)((voID *)0);
}

关于代码内存的使用,你应该减少你的代码:)

如果您还没有这样做,请在构建类型中将MinifyEnabled设置为true,假设您正在使用调试版本检查内存使用情况:

...    buildTypes {        deBUG {            MinifyEnabled true            proguardfiles getDefaultProguardfile('proguard-androID.txt'),'proguard-rules.pro'        }    ...

此外,关闭即时运行(参见“注释”here).

总结

以上是内存溢出为你收集整理的android – 为什么Memory Profiler中的“Code”和“Native”部分使用了太多的内存,我该如何减少它?全部内容,希望文章能够帮你解决android – 为什么Memory Profiler中的“Code”和“Native”部分使用了太多的内存,我该如何减少它?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1135008.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存