android - 如何访问类加载器/App Linearalloc 类信息大小?

标签 android memory android-ndk classloader dalvik

信息:这里应该解决的不是 LinearAlloc 问题!

你好,

我的问题是分析 LinearAlloc exceeded capacity error(1)。虽然我已经有了错误的解决方案,但我仍然需要一种方法来分析正在运行的应用程序的已用大小。 我使用的是 Android 4.0.3(无法更新),这意味着容量为 8mb。

错误发生在运行时,因为应用程序/库是动态加载的(2)。 在第 306 行的 LinearAlloc.cpp (3) 中,我的解决方案是:

LOGVV("--- old=%d size=%d new=%d", startOffset, size, nextOffset);

如何启用 VeryVerbose 日志级别?

或者

有没有其他方法可以访问bootclasspath classloader header的已用内存大小(见(3))?

也许来自 NDK-Api?

如果我没记错的话,它是类信息的内存。 该用法的特定内存正是我要查找的内容。

使用了多少容量以及如何在运行时访问它?

没有必要在代码中访问它我只需要这个值。 如果可以从 dumpsys meminfoDDMS 计算它是否也可以解决问题。

不需要root的方案优先!

(1) LinearAlloc exceeded capacity

(2) 不允许发布 3 个链接:google: Custom Classloading Android

(3) LinearAlloc.cpp

编辑:添加 NDK-API 作为可能的解决方案。

附言这是我的第一个问题/帖子,欢迎提出任何改进建议。

最佳答案

据我所知,没有针对 Dalvik LinearAlloc Si​​ze 的 SDK/NDK API。但是您可以通过访问 Linux 接口(interface)/proc//smap 来计算这个大小以获取详细信息。

map :

/dev/ashmem/dalvik-LinearAlloc

在 Dalvik 代码中,此内存最大映射大小为 16M。而这 block 内存是mmap分配的,所以基本 block 是4K。因此,如果您想计算此内存使用量,请使用 RSS @Smap。

关于android - 如何访问类加载器/App Linearalloc 类信息大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13308321/

相关文章:

android - 解析 xml 文件

linux - 测量进程使用的内存,考虑写时复制

android - 我的 native C++ Android 程序中缺少 glShaderModel 库

java - Android NDK 可以将 Windows dll 包含到 Android 共享库中吗?

android - 在 windows 平台上使用 libVLC for Android

android - Android 上的谷歌浏览器(仅限 Android)不允许使用类型号和步长为 ="any"的 Decimal

java - Android 实时数据 : Transformation switchMap: Apply filter on the original list and show the filtered data

java - 如何在所有 Activity 中保持播放同一首歌

iphone - NSData 的 dataWithBytesNoCopy 和 writeToFile

c - 这段代码是否会导致内存泄漏