内存抖动

121 阅读1分钟

内存抖动介绍

定义:内存频繁分配和回收导致内存不稳定

表现:频繁GC、内存曲线呈锯齿状

危害:导致卡顿、OOM

内存抖动导致OOM

频繁创建对象,导致内存不足及碎片(不连续)

不连续的内存片无法被分配,导致OOM

内存抖动解决实战

使用Memory Profiler初步排查

使用Memory Profiler或CPU Profiler结合代码排查

public class MemoryShakeActivity extends AppCompatActivity implements View.OnClickListener {

    @SuppressLint("HandlerLeak")
    private static Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            // 创造内存抖动
            for (int index = 0; index <= 100; index++){
                String arg[] = new String[100000];
            }
            mHandler.sendEmptyMessageDelayed(0,30);
        }
    };

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_memory);
        findViewById(R.id.bt_memory).setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        mHandler.sendEmptyMessage(0);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mHandler.removeCallbacksAndMessages(null);
    }
}

现象:

137103435.png 排查:

137122237.png

内存抖动解决技巧

找循环或频繁调用的地方