簡體   English   中英

連續內存分配不會導致泄漏

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM