Android中的堆栈-android:largeHeap="true"

本文介绍了Android应用程序在Dalvik虚拟机中的内存管理方式,包括堆和栈的作用及区别,并讲解了如何通过设置largeHeap属性来为应用分配更多的堆内存。

链接:https://blog.youkuaiyun.com/feather_wch/article/details/79801163

1、JVM中的堆与栈

  1. 一个Android程序在运行时会启动一个Dalvik虚拟机(暂不讨论ART模式)
  2. 虚拟机的运行时内存一般由堆和栈两大部分构成。
  3. 栈是存储方法调用的一片内存数据区。
  4. 堆内存占据了虚拟机的大部分内存空间,程序执行时产生的对象就分配在堆内存上。
  5. 如果是堆内存没有可用的空间存储生成的对象,JVM会抛出java.lang.OutOfMemoryError。

2、 Android中如何申请更大的Heap
一个应用如果使用了largeHeap,会请求系统为Dalvik虚拟机分配更大的内存空间。

<application android:icon="@drawable/icon"
  xxx
  android:largeHeap="true"
>
2025-07-14 20:52:56.613 16719-16719 libc com.example.baiyunmap A Fatal signal 11 (SIGSEGV), code 128 (SI_KERNEL), fault addr 0x0 in tid 16719 (ample.baiyunmap), pid 16719 (ample.baiyunmap) 2025-07-14 20:52:56.760 16764-16764 DEBUG crash_dump64 A Cmdline: com.example.baiyunmap 2025-07-14 20:52:56.760 16764-16764 DEBUG crash_dump64 A pid: 16719, tid: 16719, name: ample.baiyunmap >>> com.example.baiyunmap <<< 2025-07-14 20:52:56.760 16764-16764 DEBUG crash_dump64 A #00 pc 00000000004cab64 /data/app/~~GH4cttM5bhhxQGtsFxUI6g==/com.example.baiyunmap-B9nDs57RKktTXCsTdBsrXQ==/base.apk!libBaiduMapSDK_map_for_navi_v7_6_5.so (offset 0x4794000) (_baidu_framework::CBaseLayer::CBaseLayer()+148) (BuildId: 72389d7e76ac01b9603c2b9a85daaaadbdc06757) 2025-07-14 20:52:56.760 16764-16764 DEBUG crash_dump64 A #01 pc 000000000072d769 /data/app/~~GH4cttM5bhhxQGtsFxUI6g==/com.example.baiyunmap-B9nDs57RKktTXCsTdBsrXQ==/base.apk!libBaiduMapSDK_map_for_navi_v7_6_5.so (offset 0x4794000) (BuildId: 72389d7e76ac01b9603c2b9a85daaaadbdc06757) 2025-07-14 20:52:56.760 16764-16764 DEBUG crash_dump64 A #02 pc 0000000000741036 /data/app/~~GH4cttM5bhhxQGtsFxUI6g==/com.example.baiyunmap-B9nDs57RKktTXCsTdBsrXQ==/base.apk!libBaiduMapSDK_map_for_navi_v7_6_5.so (offset 0x4794000) (BuildId: 72389d7e76ac01b9603c2b9a85daaaadbdc06757) 2025-07-14 20:52:56.760 16764-16764 DEBUG crash_dump64 A #03 pc 000000000043abb0 /data/app/~~GH4cttM5bhhxQGtsFxUI6g==/com.example.baiyunmap-B9nDs57RKktTXCsTdBsrXQ==/base.apk!libBaiduMapSDK_map_for_navi_v7_6_5.so (offset 0x4794000) (_baidu_framework::CVComServer::ComCreateInstance(_baidu_vi::CVString const&, _baidu_vi::CVString const&, void**)+112) (BuildId: 72389d7e76ac01b9603c2b9a85daaaadbdc06757) 2025-07-14 20:52:56.760 16764-16764 DEBUG crash_dump64 A #04 pc 000000000052e8b1 /data/app/~~GH4cttM5bhhxQGtsFxUI6g==/com.example.baiyunmap-B9nDs57RKktTXCsTdBsrXQ==/base.apk!libBaiduMapSDK_map_for_navi_v7_6_5.so (offset 0x4794000) (BuildId: 72389d7e76ac01b9603c2b9a85daaaadbdc06757) 2025-07-14 20:52:56.760 16764-16764 DEBUG crash_dump64 A #05 pc 0000000000530502 /data/app/~~GH4cttM5bhhxQGtsFxUI6g==/com.example.baiyunmap-B9nDs57RKktTXCsTdBsrXQ==/base.apk!libBaiduMapSDK_map_for_navi_v7_6_5.so (offset 0x4794000) (BuildId: 72389d7e76ac01b9603c2b9a85daaaadbdc06757) 2025-07-14 20:52:56.760 16764-16764 DEBUG crash_dump64 A #06 pc 0000000000522990 /data/app/~~GH4cttM5bhhxQGtsFxUI6g==/com.example.baiyunmap-B9nDs57RKktTXCsTdBsrXQ==/base.apk!libBaiduMapSDK_map_for_navi_v7_6_5.so (offset 0x4794000) (_baidu_framework::IVMapbaseFactory::CreateInstance(_baidu_vi::CVString const&, void**)+128) (BuildId: 72389d7e76ac01b9603c2b9a85daaaadbdc06757) 2025-07-14 20:52:56.760 16764-16764 DEBUG crash_dump64 A #07 pc 000000000043abb0 /data/app/~~GH4cttM5bhhxQGtsFxUI6g==/com.example.baiyunmap-B9nDs57RKktTXCsTdBsrXQ==/base.apk!libBaiduMapSDK_map_for_navi_v7_6_5.so (offset 0x4794000) (_baidu_framework::CVComServer::ComCreateInstance(_baidu_vi::CVString const&, _baidu_vi::CVString const&, void**)+112) (BuildId: 72389d7e76ac01b9603c2b9a85daaaadbdc06757) 2025-07-14 20:52:56.760 16764-16764 DEBUG crash_dump64 A #08 pc 000000000048b694 /data/app/~~GH4cttM5bhhxQGtsFxUI6g==/com.example.baiyunmap-B9nDs57RKktTXCsTdBsrXQ==/base.apk!libBaiduMapSDK_map_for_navi_v7_6_5.so (offset 0x4794000) (BuildId: 72389d7e76ac01b9603c2b9a85daaaadbdc06757) 2025-07-14 20:52:56.766 16764-16764 DEBUG crash_dump64 A #138 pc 00000000000016f8 /data/data/com.example.baiyunmap/code_cache/.overlay/base.apk/classes3.dex (com.example.baiyunmap.MainActivity.onCreate+0)
07-15
2025-07-14 20:14:37.232 15840-15840 libc com.example.baiyunmap A Fatal signal 11 (SIGSEGV), code 128 (SI_KERNEL), fault addr 0x0 in tid 15840 (ample.baiyunmap), pid 15840 (ample.baiyunmap) 2025-07-14 20:14:37.602 15885-15885 DEBUG pid-15885 A Cmdline: com.example.baiyunmap 2025-07-14 20:14:37.602 15885-15885 DEBUG pid-15885 A pid: 15840, tid: 15840, name: ample.baiyunmap >>> com.example.baiyunmap <<< 2025-07-14 20:14:37.602 15885-15885 DEBUG pid-15885 A #00 pc 00000000004cab64 /data/app/~~OljfxsydegH-sraOS4Y7Kg==/com.example.baiyunmap-QyH9YPNP5Ohzcm110rmefQ==/lib/x86_64/libBaiduMapSDK_map_for_navi_v7_6_5.so (_baidu_framework::CBaseLayer::CBaseLayer()+148) (BuildId: 72389d7e76ac01b9603c2b9a85daaaadbdc06757) 2025-07-14 20:14:37.602 15885-15885 DEBUG pid-15885 A #01 pc 000000000072d769 /data/app/~~OljfxsydegH-sraOS4Y7Kg==/com.example.baiyunmap-QyH9YPNP5Ohzcm110rmefQ==/lib/x86_64/libBaiduMapSDK_map_for_navi_v7_6_5.so (BuildId: 72389d7e76ac01b9603c2b9a85daaaadbdc06757) 2025-07-14 20:14:37.602 15885-15885 DEBUG pid-15885 A #02 pc 0000000000741036 /data/app/~~OljfxsydegH-sraOS4Y7Kg==/com.example.baiyunmap-QyH9YPNP5Ohzcm110rmefQ==/lib/x86_64/libBaiduMapSDK_map_for_navi_v7_6_5.so (BuildId: 72389d7e76ac01b9603c2b9a85daaaadbdc06757) 2025-07-14 20:14:37.602 15885-15885 DEBUG pid-15885 A #03 pc 000000000043abb0 /data/app/~~OljfxsydegH-sraOS4Y7Kg==/com.example.baiyunmap-QyH9YPNP5Ohzcm110rmefQ==/lib/x86_64/libBaiduMapSDK_map_for_navi_v7_6_5.so (_baidu_framework::CVComServer::ComCreateInstance(_baidu_vi::CVString const&, _baidu_vi::CVString const&, void**)+112) (BuildId: 72389d7e76ac01b9603c2b9a85daaaadbdc06757) 2025-07-14 20:14:37.602 15885-15885 DEBUG pid-15885 A #04 pc 000000000052e8b1 /data/app/~~OljfxsydegH-sraOS4Y7Kg==/com.example.baiyunmap-QyH9YPNP5Ohzcm110rmefQ==/lib/x86_64/libBaiduMapSDK_map_for_navi_v7_6_5.so (BuildId: 72389d7e76ac01b9603c2b9a85daaaadbdc06757) 2025-07-14 20:14:37.602 15885-15885 DEBUG pid-15885 A #05 pc 0000000000530502 /data/app/~~OljfxsydegH-sraOS4Y7Kg==/com.example.baiyunmap-QyH9YPNP5Ohzcm110rmefQ==/lib/x86_64/libBaiduMapSDK_map_for_navi_v7_6_5.so (BuildId: 72389d7e76ac01b9603c2b9a85daaaadbdc06757) 2025-07-14 20:14:37.602 15885-15885 DEBUG pid-15885 A #06 pc 0000000000522990 /data/app/~~OljfxsydegH-sraOS4Y7Kg==/com.example.baiyunmap-QyH9YPNP5Ohzcm110rmefQ==/lib/x86_64/libBaiduMapSDK_map_for_navi_v7_6_5.so (_baidu_framework::IVMapbaseFactory::CreateInstance(_baidu_vi::CVString const&, void**)+128) (BuildId: 72389d7e76ac01b9603c2b9a85daaaadbdc06757) 2025-07-14 20:14:37.602 15885-15885 DEBUG pid-15885 A #07 pc 000000000043abb0 /data/app/~~OljfxsydegH-sraOS4Y7Kg==/com.example.baiyunmap-QyH9YPNP5Ohzcm110rmefQ==/lib/x86_64/libBaiduMapSDK_map_for_navi_v7_6_5.so (_baidu_framework::CVComServer::ComCreateInstance(_baidu_vi::CVString const&, _baidu_vi::CVString const&, void**)+112) (BuildId: 72389d7e76ac01b9603c2b9a85daaaadbdc06757) 2025-07-14 20:14:37.602 15885-15885 DEBUG pid-15885 A #08 pc 000000000048b694 /data/app/~~OljfxsydegH-sraOS4Y7Kg==/com.example.baiyunmap-QyH9YPNP5Ohzcm110rmefQ==/lib/x86_64/libBaiduMapSDK_map_for_navi_v7_6_5.so (BuildId: 72389d7e76ac01b9603c2b9a85daaaadbdc06757) 2025-07-14 20:14:37.603 15885-15885 DEBUG pid-15885 A #138 pc 000000000000161c <anonymous:7784fab9c000> (com.example.baiyunmap.MainActivity.onCreate+0)
07-15
结合报错和堆栈看下dequeueBuffer: fence 259 didn't signal in 1000 ms原因 11-06 04:11:31.107 4402 11127 E GED : dequeueBuffer: fence 259 didn't signal in 1000 ms (try = 1) 11-06 04:11:31.107 4402 11127 I GED : dequeueBuffer: fence(LayerRelease) status(0) 11-06 04:11:33.847 26224 26224 F DEBUG : #00 pc 00000000000fa748 /apex/com.android.runtime/lib64/bionic/libc.so (__ppoll+8) (BuildId: 5ce1b77804344241efd50e639525e040) 11-06 04:11:33.847 26224 26224 F DEBUG : #01 pc 000000000009a27c /apex/com.android.runtime/lib64/bionic/libc.so (poll+92) (BuildId: 5ce1b77804344241efd50e639525e040) 11-06 04:11:33.847 26224 26224 F DEBUG : #02 pc 000000000000406c /system/lib64/libsync.so (sync_wait+60) (BuildId: 069ff889c3195cd31df9cb9836e02ec0) 11-06 04:11:33.847 26224 26224 F DEBUG : #03 pc 000000000003ef48 /system/lib64/libui.so (android::Fence::waitForever(char const*)+72) (BuildId: 24aaaa159cfed588c363c360a3e24c69) 11-06 04:11:33.847 26224 26224 F DEBUG : #04 pc 00000000000f7d6c /system/lib64/libgui.so (android::BufferQueueProducer::queueBuffer(int, android::IGraphicBufferProducer::QueueBufferInput const&, android::IGraphicBufferProducer::QueueBufferOutput*)+5612) (BuildId: 59b006503982558aa9b4872ca3215e29) 11-06 04:11:33.847 26224 26224 F DEBUG : #05 pc 0000000000102690 /system/lib64/libgui.so (android::Surface::queueBuffer(ANativeWindowBuffer*, int, android::SurfaceQueueBufferOutput*)+1632) (BuildId: 59b006503982558aa9b4872ca3215e29) 11-06 04:11:33.847 26224 26224 F DEBUG : #06 pc 00000000006a924c /system/bin/surfaceflinger (android::compositionengine::impl::RenderSurface::queueBuffer(android::base::unique_fd_impl<android::base::DefaultCloser>, float, bool)+284) (BuildId: 681edbcf9675671abae89dcc7cb9c00c) 11-06 04:11:33.847 26224 26224 F DEBUG : #07 pc 00000000004b223c /system/bin/surfaceflinger (android::compositionengine::impl::Output::finishFrame(android::compositionengine::impl::GpuCompositionResult&&)+1052) (BuildId: 681edbcf9675671abae89dcc7cb9c00c) 11-06 04:11:33.847 26224 26224 F DEBUG : #08 pc 0000000000417e4c /system/bin/surfaceflinger (android::compositionengine::impl::Output::present(android::compositionengine::CompositionRefreshArgs const&)+972) (BuildId: 681edbcf9675671abae89dcc7cb9c00c) 11-06 04:11:33.847 26224 26224 F DEBUG : #09 pc 000000000041a82c /system/bin/surfaceflinger (android::compositionengine::impl::CompositionEngine::present(android::compositionengine::CompositionRefreshArgs&)+1660) (BuildId: 681edbcf9675671abae89dcc7cb9c00c) 11-06 04:11:33.847 26224 26224 F DEBUG : #10 pc 0000000000287e80 /system/bin/surfaceflinger (android::SurfaceFlinger::composite(android::PhysicalDisplayId, android::ftl::SmallMap<android::PhysicalDisplayId, android::scheduler::FrameTargeter*, 3ul, std::__1::equal_to<android::PhysicalDisplayId>> const&)+10016) (BuildId: 681edbcf9675671abae89dcc7cb9c00c) 11-06 04:11:33.847 26224 26224 F DEBUG : #11 pc 0000000000337a44 /system/bin/surfaceflinger (android::scheduler::Scheduler::onFrameSignal(android::ICompositor&, android::VsyncId, android::TimePoint)+964) (BuildId: 681edbcf9675671abae89dcc7cb9c00c) 11-06 04:11:33.847 26224 26224 F DEBUG : #12 pc 00000000003b10c0 /system/bin/surfaceflinger (android::impl::MessageQueue::Handler::handleMessage(android::Message const&)+144) (BuildId: 681edbcf9675671abae89dcc7cb9c00c) 11-06 04:11:33.847 26224 26224 F DEBUG : #13 pc 0000000000016ef4 /system/lib64/libutils.so (android::Looper::pollOnce(int, int*, int*, void**)+1540) (BuildId: e41f2bc353059dc14cf4ee6b493447a4) 11-06 04:11:33.847 26224 26224 F DEBUG : #14 pc 00000000005f9e9c /system/bin/surfaceflinger (android::impl::MessageQueue::waitMessage()+44) (BuildId: 681edbcf9675671abae89dcc7cb9c00c) 11-06 04:11:33.847 26224 26224 F DEBUG : #15 pc 00000000006593d8 /system/bin/surfaceflinger (main+1832) (BuildId: 681edbcf9675671abae89dcc7cb9c00c) 11-06 04:11:33.847 26224 26224 F DEBUG : #16 pc 0000000000084868 /apex/com.android.runtime/lib64/bionic/libc.so (__libc_init+120) (BuildId: 5ce1b77804344241efd50e639525e040) 11-06 04:11:33.856 4402 11111 I BufferQueueProducer: [VRI[Launcher][com.android.launcher/com.android.launcher.Launcher]#577(BLAST Consumer)577](id:113200000446,api:1,p:4402,c:4402) waitForFreeSlotThenRelock TIMED_OUT 0, custom timeout 4000000000 dequeuedCount=0, acquiredCount=5, mMaxAcquiredBufferCount=3, mMaxDequeuedBufferCount=2
最新发布
11-28
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猎羽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值