Articles of 内存管理

典型的Android应用程序应该使用多少内存?

我在android平台上开发了一个文件解析应用程序。 如何检查应用程序实际耗尽的内存量? 我尝试了adb shell cat / proc / meminfo命令,但这并没有给我我的应用程序使用了多少内存。 它只是提供有关整体内存的一般信息。 应用程序通常会占用多少内存? 通常或不寻常的是什么? 任何帮助表示赞赏。 谢谢 !

在Android中,外部分配对于此过程来说太大了

我的应用程序中的“ 外部分配对于此过程而言太大 ”错误。 很多这些一下子: 11-16 10:56:59.230: ERROR/dalvikvm-heap(2875): 1303680-byte external allocation too large for this process. 11-16 10:56:59.230: ERROR/GraphicsJNI(2875): VM won’t let us allocate 1303680 bytes 11-16 10:56:59.230: ERROR/dalvikvm-heap(2875): 1536000-byte external allocation too large for this process. 11-16 10:56:59.230: ERROR/GraphicsJNI(2875): VM won’t let us allocate 1536000 bytes 在加载大位图后,看起来它们是在渲染布局时生成的。 但是,在解码位图时不会产生错误。 我该如何调试这些错误? 任何额外的指针?

Android内存分配

我得到“位图大小超过VM预算”错误。 我已经读过有16MB的内存限制。 在这个主题中, Romain Guy说“你只能为整个应用程序分配16 MB的内存”。 但是,我的应用程序必须在达到该限制之前很久就会耗尽内存。 所以我的问题是:如何为我的应用程序分配内存…如何增加我的应用程序的分配(最大16MB内)?

EditText导致内存泄漏

介绍: 我有一个具有以下结构的应用程序:ActionBar up top(ActionBarSherlock)ViewPagerIndicator(用于标签)ViewPager(hosts Fragments) 我有一个问题,我的一个片段导致相当大的内存泄漏。 我将问题缩小到以下情况: 导致泄漏的碎片除了在onCreateView方法中膨胀布局外什么都不做。 这是通过以下方式完成的: return inflater.inflate(R.layout.filter_auctions_fragment, container, false); 这里没什么不寻常的。 布局文件中只包含一个ScrollView , LinearLayout和两个EditText (包含更多通常的内容,但我将问题缩小到这些视图以使其变得简单)。 现在用于添加片段的代码:mTabsAdapter.addTab(tabName,ProblematicFragment.class); mTabsAdapter是mTabsAdapter的一个实例, mTabsAdapter是一个扩展支持库的FragmentPagerAdapter的类。 这是相当标准的,所以我不包括使这个问题尽可能短的来源。 现在有趣的部分: 当我来回旋转设备几次时,堆会发生这种情况: 12-28 12:26:27.180: D/dalvikvm(18841): GC_CONCURRENT freed 530K, 7% free 10701K/11436K, paused 4ms+7ms, total 58ms 12-28 12:26:27.180: D/dalvikvm(18841): WAIT_FOR_CONCURRENT_GC blocked 24ms 12-28 12:26:28.270: D/dalvikvm(18841): GC_CONCURRENT freed 737K, 8% free 11048K/11964K, paused 4ms+5ms, total […]

android:largeHeap =“true”约定?

我正在写一个图片库应用程序,我一直遇到内存不足错误。 我缓存了所有图像,但是当我尝试快速切换图像时会出现问题。 我假设应用程序分配内存比GC有时间释放它们更快(因为当我慢慢切换图像时不会发生崩溃)。 在对这个问题喋喋不休几天后,我终于决定尝试在清单文件中提供largeHeap设置。 完成此设置后,无论我在图像之间切换多快,我的应用程序都不会崩溃。 现在,我想知道是否存在使用largeHeap设置的任何约定或一般准则,因为如果使用注释应用程序使用largeHeap可能没有多大意义。 一般来说,哪些应用程序适合largeHeap设置? 谢谢

在Android中缓存文件时的最佳实践

我目前将应用程序缓存图像文件放在应用程序的cache子目录中。 这些图像在ListView中使用,并存储在SoftReferences到Bitmaps的HashMap中。 所以我的问题是这样,缓存这些图像文件的最佳方法是什么,而不会膨胀我的应用程序使用的空间并从用户角度保持响应。 我关心的事情: 我知道用户可以清除缓存,并且当内部存储器空间不足时自动完成,但我觉得大多数用户会看到几个MB应用程序并将其卸载。 此外,如果空间一直很低,我的应用程序将继续下载图像,使其显得更慢。 大多数设备都预先安装了SD卡,但未插入SD卡时该怎么办? 与内部存储相比,SD卡也可能更慢,从而影响我的应用程序的性能。 我应该包含一个选项来选择缓存的位置吗? 我应该尝试管理缓存的大小(可以在/ cache或/ sdcard中)还是只是忘记它? 感谢您的时间(我知道的很长一段时间),请发布任何相关经验。

Android,跟踪DDMS的记忆,“Get Allocations”没有做任何事情

正如问题的标题所说。 我做的步骤: 单击Update heap 在“分配跟踪器”选项卡中,单击“开始跟踪” 点击“获取分配” 在控制台中,我看到红色消息说: [2013-12-29 13:56:40 – ddm-heap] ***收到了真实的 发生了什么? 我错过了什么吗? 谢谢

如何最小化GC_FOR_ALLOC次数?

我的应用程序导致这些可怕的GC_FOR_ALLOC在特定位置(方法)多次发生: 12-29 22:20:30.229: D/dalvikvm(10592): GC_FOR_ALLOC freed 1105K, 14% free 10933K/12615K, paused 33ms, total 34ms 12-29 22:20:30.260: D/dalvikvm(10592): GC_FOR_ALLOC freed 337K, 13% free 11055K/12615K, paused 25ms, total 26ms 12-29 22:20:30.288: D/dalvikvm(10592): GC_FOR_ALLOC freed 278K, 14% free 10951K/12615K, paused 24ms, total 24ms 12-29 22:20:30.495: D/dalvikvm(10592): GC_CONCURRENT freed 633K, 11% free 11317K/12615K, paused 16ms+3ms, total 79ms 12-29 22:20:30.495: […]

Android:“尝试使用回收的位图”错误与临时位图

我的应用可以加载相当大的图像。 为了保持记忆保守,我试图使用临时位图来加载,而另一个用于转换后的最终图像: ….. finalBitmap.recycle(); finalBitmap = null; Bitmap tempBitmap = BitmapFactory.decodeStream(fin, …); finalBitmap = Bitmap.createBitmap(tempBitmap, ….); imgview.setImageBitmap(finalBitmap); ….. 现在,在这一点上,我们已经完成了tempBitmap,只需要将解码后的Bitmap传输到createBitmap中的转换步骤。 所以: ….. tempBitmap.recycle(); tempBitmap = null; ….. 而且……由于tempBitmap的回收,它因“尝试使用循环位图”错误而崩溃。 tempBitmap未显示,仅在此处使用 。 这里出了什么问题? 我应该只使用“finalBitmap”并依靠createBitmap来管理它( finalBitmap = Bitmap.createBitmap( finalBitmap ,….))? 我没有看到对tempBitmap的持续依赖会导致这样的失败。 编辑:是的,空赋值似乎导致适当的, 最终的垃圾收集,但我很困惑,为什么临时Bitmap上的recycle()在这种情况下是如此有问题。 我得到的印象是createBitmap()持有对它的引用,但为什么,以及持续多长时间?

Android:浅堆和保留堆之间有什么区别

我试图通过MAT找出应用程序的内存泄漏,这里在list_object我发现了一些数值int Shallow heap和retained heap列。 这些价值是什么,以及如何知道内存泄漏的位置。