繁体   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