连续内存分配不会导致泄漏

时间:2017-11-08 12:12:22

标签: java android memory memory-management jvm

我试图在Android中模拟OutOfMemory异常。我的方法基本上是使用静态ArrayList继续添加2017-11-08 20:07:31 app ERROR ---- 2017-11-08 20:07:31 app WARNING ---- 2017-11-08 20:07:31 app ERROR ---- 2017-11-08 20:07:31 app WARNING ---- 2017-11-08 20:07:31 werkzeug WARNING * Debugger is active! 数组。

我让程序运行了一段时间,它收集了685个long[2048]个实例。使用Android Studio的3.0分析器,堆转储看起来像这样:

long[2048]

因此,内存不会被垃圾收集。无论如何,该应用程序的堆内存仍然保持在40Mb并且不会下降。

为什么会这样?不应该是应用程序泄漏内存,就像现在没有明天一样?这次JVM做了什么伎俩?

另外,| class name | alloc count | shallow size | retained size | | ---------- | ----------- | ------------ | ------------- | | long[] | 685 | 9997168 | 9997168 | shallow size之间有什么区别?

P.S:这是代码:

retained size

1 个答案:

答案 0 :(得分:0)

浅的大小是现在占用的内存,而保留的大小是收集垃圾后将被释放的大小,请参阅此处的参考

shallow vs retained size