如何在Android中收听GC事件

无论如何,我们可以监控GC事件,因为他们发生在Android?

在Java中,我相信我们可以监听事件http://www.fasterj.com/articles/gcnotifs.shtml但是java.lang.management APIs在Android中不可用。

Solutions Collecting From Web of "如何在Android中收听GC事件"

为什么你想要这个倾听者。 如果您只是想知道您的应用是否内存不足,请检查以下内容:

内存变得紧张时释放内存

在应用生命周期的任何阶段,onTrimMemory()callback还会告诉您整个设备内存何时变低。 您应该根据onTrimMemory()提供的以下内存级别进一步释放资源来做出响应:

  • TRIM_MEMORY_RUNNING_MODERATE您的应用程序正在运行,但不被认为是可用的,但设备内存不足,系统正在主动查杀LRUcaching中的进程。
  • TRIM_MEMORY_RUNNING_LOW您的应用程序正在运行,但不被认为是可用的,但是设备在内存上的运行要低得多,因此您应该释放未使用的资源来提高系统性能(这会直接影响您的应用程序的性能)。
  • TRIM_MEMORY_RUNNING_CRITICAL您的应用程序仍在运行,但系统已经杀死了LRUcaching中的大部分进程,所以现在应该释放所有非关键资源。 如果系统不能回收足够的RAM,它将清除所有的LRUcaching,并开始杀死系统希望保持活动的进程,例如那些托pipe正在运行的服务的进程。 此外,当您的应用程序进程正在caching时,您可能会从onTrimMemory()收到以下级别之一:

  • TRIM_MEMORY_BACKGROUND系统内存不足,进程接近LRU列表的开始处。 虽然您的应用程序进程没有被杀死的高风险,但系统可能已经在杀死LRUcaching中的进程。 您应该释放容易恢复的资源,以便您的进程保留在列表中,并在用户返回到您的应用程序时快速恢复。

  • TRIM_MEMORY_MODERATE系统内存不足,进程接近LRU列表的中间位置。 如果系统进一步限制内存,那么你的进程就有可能被杀死。
  • TRIM_MEMORY_COMPLETE系统内存不足,如果系统现在不恢复内存,那么你的进程是第一个被终止的进程。 你应该释放一切对于恢复你的应用程序状态不重要的东西。 因为onTrimMemory()callback是在API级别14中添加的,所以可以使用onLowMemory()callback作为旧版本的回退,这大致等同于TRIM_MEMORY_COMPLETE事件。

这里是参考链接https://developer.android.com/training/articles/memory.html

好吧,达尔维克和艺术都会有所不同。

基本上你可以指示adb shell将GC事件logging在跟踪文件中。

艺术: https : //source.android.com/devices/tech/dalvik/gc-debug.html

它甚至可能是art和dalvik的adb命令。

内存监视器工具插入到这个时候,它显示在android studio你的内存graphics图表。

在编程上,可能会更困难..看看FB如何做他们的性能工具,因为我相信他们正在从本地C / C ++端进行GC事件计数,并将它们放在一个flatbuffer中,以便他们的java端分析工具代码访问..