客户机是微信支付 POS 机, 推广款免费摆店里那种, 安卓 8.1, 只有 2G 内存, 启动剩余 900mb 左右, 系统自带的 webview 版本是 61, 应用内置了腾讯 X5 内核, 由于性能问题考虑,程序采取的策略是启动预读取全部需要数据(webview 嘛), 最近发现了部分产线闪退的情况, 我们测试发现是 X5 内核给 webview 分配了一个极低的最大内存(132mb), 导致当程序 webview 占用内存达到 160mb 左右时(实测出来的数据)程序就会因为 GC 被干掉导致闪退
数据来源是通过 performance.memory.jsHeapSizeLimit 获取统计到的
我进行了下测试,编写个测试 html 不间断生成对象,同时记录内存占用一直到闪退,测试发现原生 webview61 默认给分配的是 527.38mb, 腾讯 X5 则只给程序分配了 132.56mb, 严谨起见我安装了个夸克浏览器(webview100)发现夸克也给测试页面分配了 527.38mb(夸克到达极限内存的情况是页面重载而不是闪退)
很奇怪的一点, 感觉这个最大内存限制似乎来自于某项配置但我没找到, 不然没理由夸克和系统的 webview 分配的内存是完全一致的,腾讯 X5 这项就小的离谱了
以下图中数据均来自于 performance.memory , 堆大小和总堆大小可以不用管安卓端 webview 这两项数据是初始页面数据不会刷新, 最终占用内存是调试模式查看的, 所有图片全部是 闪退/重载前 最后一刻拍的,可以看到夸克和系统 webview 数据很接近基本一致, 证明 performance.memory.jsHeapSizeLimit 确实有参考性
以下为夸克数据(webview100)
以下为系统 webview 数据(webview61)
以下为腾讯 X5 数据(webview89)
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.