[英]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.