我注意到,在“满载”(我的最高内存消耗模式)下,我使用了近93%的内存。
我的第一个问题,,我用了很多绘图,相对较小。我用一个LRUCache缓存它们,如果不再需要什么东西,我当然会释放LRUCache。93%的人是从一开始就被分配了那么多内存,还是堆的正常行为?
旋转之后,我注意到堆在增加,从逻辑上讲,我的内存消耗(Percantage)正在减少。
第二个问题
这一切为什么要发生?我所做的几乎完全一样,我只使用一点点记忆。
启动后的
一次旋转后的
通知
我没有内存泄漏,至少没有一个大到我能注意到。堆消耗总是在2-4%的范围内波动.
发布于 2014-12-23 08:41:57
当您旋转图像时,底层软件可能会使用旋转矩阵为您完成此操作。这是一段时间内必须放入堆中的额外内存量。但是,如果堆中没有足够的连续空间,JVM将增加堆大小以适应额外的数据。当所有对该数据的引用丢失时,GC将悄悄地释放此内存,但堆大小将保持不变,以供以后使用。这是因为使用操作系统已经分配的内存通常更快,然后释放内存页并每隔一段时间从OS请求新的内存。实际上,Java有指示何时减少堆大小的启发式方法,例如,在一段时间之后,当大部分堆不被使用时。
这里您可以找到一些控制(Oracle) Java启发式的选项。我相信其中一些也适用于。
https://stackoverflow.com/questions/27616237
复制相似问题