[英]Continuous Memory Allocation Not Causing Leakage
我正在尝试在Android中模拟OutOfMemory异常。 我的方法基本上是让静态ArrayList继续添加long[2048]
数组。
我让程序运行了一段时间,它收集了685个long[2048]
实例。 使用Android Studio的3.0分析器,堆转储如下所示:
| class name | alloc count | shallow size | retained size |
| ---------- | ----------- | ------------ | ------------- |
| long[] | 685 | 9997168 | 9997168 |
因此,内存不会被垃圾回收。 无论如何,该应用程序的堆内存保持在40Mb,并且不会下降。
为什么会这样呢? 该应用程序不应该像现在没有明天那样泄漏内存吗? JVM这次有什么技巧?
另外, shallow size
和retained size
之间有什么区别?
PS:这是代码:
public class MainActivity extends AppCompatActivity {
static List<long[]> myList = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
myList.add(loadStuff());
}
});
}
static long[] loadStuff() {
return new long[2048];
}
}
浅的大小是当前占用的内存,而保留的大小是收集垃圾后将释放的大小,请参见此处的参考。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.