我正在努力改善我的Android应用程序的性能,并且我已经得出结论,至少一些问题在于过多的垃圾收集。我可以使用堆工具来查看分配的内容,但很高兴看到正在获取垃圾收集的内容。
有没有办法告诉Java GC中释放了哪些对象?有库存工具可以吗?是否有第三方工具?
答案 0 :(得分:2)
您可以通过捕获“之前”和“之后”堆转储并计算差异来实现此目的。
使这一点变得困难的基本问题是GC不会决定丢弃的内容,它决定保留的内容,因此它并不适合收集列表释放的物体。在一些实现中,可能不存在每对象丢弃动作。 (想象一下,每个存储页面都有一个表格。在GC开始时,将所有位设置为零。对于您保留的每个对象,将其触摸的页面上的位设置为1完成后,任何零位的页面都是免费的,可以用于新的分配。)
您可以使用终结器和幻像引用为您创建的对象玩一些游戏,但并不存在所有堆对象的等效项。