compose 多平台原生内存泄漏

问题描述 投票:0回答:1

我们的 kotlin compose 多平台应用程序存在本机内存问题,该应用程序针对桌面上的 jvm(使用 amazon java 作为运行时)和 android。为了充分对我们的性能进行基准测试,我选择在固定的时间内以相同的速度在我们的应用程序上重复一组预期的用户交互,然后分析我们的性能。在 Android 上,我们的 RAM 使用情况是这样的:

安卓

enter image description here

我们的问题是在桌面平台上(linux、windows、macOs,它们都有同样的问题)。正如我所说,堆 + 非堆内存似乎工作得很好,通过不同的工具绘制图表,并通过使用 -Xmx 值进行测试。我确信没有堆内存泄漏。

[Heap ram usage captured with jProfiler](https://i.sstatic.net/Tp9YMXwJ.png)

我的非堆内存(codecash、堆空间)也很好。

但是当我测量进程的实际内存片段时:

本土

[Native ram footage on OS](https://i.sstatic.net/lQCodjB9.png) 增加到1.2GB!

Java NMI

我尝试了 Java NMT ,我得到了以下结果:

java native memory capture with jcmd

jemalloc

我还使用了jemalloc: enter image description here

问题

  • 我真的认为该 ParagraphBuilder 节点有问题。我怎样才能真正将其映射到我的 kotlin 源代码和包来识别问题的根源?
  • 我应该怀疑哪些第三方库或组合 API?
  • 我还能做些什么来真正找到我的本机内存 lea 的根源并解决它?
performance kotlin memory jvm compose-multiplatform
1个回答
0
投票

我最终观看了这个资源。在linux中,在终端中使用

pmap
,并根据
PSS
内存使用情况对输出进行排序(我读过这是一个比this文章中的RSS更好的方法),我意识到有许多大约65兆字节的内存部分在我的过程中:

enter image description here

如果发生这种情况(你有很多带有 2^16 字节内存的块),这可能意味着标准内存分配器 malloc 有问题(这似乎是因为 java 中的 ByteBuffer 类型直接使用 malloc 来使用内存并且发布时出现问题)。所以我将 malloc 更改为 jemalloc (然后更改为 mimalloc )并且它起作用了!现在我们的进程已经不再有这些内存段了,它的内存已经正常释放了。

© www.soinside.com 2019 - 2024. All rights reserved.