繁体   English   中英

旋转后堆大小增加了吗?

[英]Heap Size increasing after Rotation?

我注意到我在“满载”(我的最高内存消耗模式)下使用近93%的内存。

我的第一个问题是我使用了大量可绘制对象,相对较小。 我用LRUCache缓存它们,并确保如果不再需要那里的东西,则释放LRUCache。 是93%的启动方式是否对他分配了那么多Memory的堆有很大影响还是正常行为?


旋转后,我注意到堆在增加,从逻辑上说,我的内存消耗(percantage)正在减少。

第二个问题

为什么会这样? 我几乎完全一样,只是使用了更多的内存。

启动后

在此处输入图片说明

旋转一圈后

在此处输入图片说明

注意

我没有内存泄漏,至少没有一个我能注意到的足够大的泄漏。 堆消耗始终在2-4%的范围内波动。

旋转图像时,底层软件可能会使用旋转矩阵为您完成此操作。 这是必须暂时放置到堆中的额外内存量。 但是,如果堆中没有足够的连续空间,JVM将增加堆大小以适合您的额外数据。 当所有对数据的引用都丢失时,GC会静默释放该内存,但堆大小保持不变,以备将来使用。 这是因为使用操作系统已经分配的内存通常会更快,然后每隔一段时间释放内存页面并向OS请求新内存。 实际上,Java具有启发式功能,可以告诉它何时减小堆大小,例如一段时间后,何时不使用大部分堆。

在这里,您可以找到一些控制(Oracle)Java启发式的选项。 我相信其中一些也适用于Android Dalvik JVM。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM