美文网首页
Android 内存抖动介绍及实例演示

Android 内存抖动介绍及实例演示

作者: wuchao226 | 来源:发表于2019-08-07 10:46 被阅读0次

一、内存抖动介绍

定义:内存频繁分配和回收导致内存不稳定
表现:频繁 GC、内存曲线呈锯齿状
危害:导致卡顿、OOM

二、内存抖动导致OOM原因

  1. 频繁创建对象,导致内存不足及碎片(不连续)
  2. 不连续的内存片无法被分配,导致OOM

三、内存抖动解决实战

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

首先模拟内存抖动的实例,如下所示:

/**
 * @desciption: 模拟内存抖动的界面
 */
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_shake);
        initView();
    }


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

    private void initView() {
        AppCompatButton mBtnExecute = (AppCompatButton) findViewById(R.id.btn_execute);
        mBtnExecute.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        if (v.getId() == R.id.btn_execute) {
            mHandler.sendEmptyMessage(0);
        }
    }
}

运行效果如下图:

在点击“执行任务”按钮之前的内存效果图如下:

从图中可以看出内存一直稳定在83.1MB。

在点击“执行任务”按钮之后内存效果图如下:

从图中可以看到内存忽高忽低,呈锯齿状,这说明有内存抖动的现象。

查看导致内存抖动的代码位置

首先看下图所示:

根据图中箭头指示可以找到内存抖动的位置,点击‘Jump to Source’ 即可跳转到发送内存抖动的代码位置。

内存抖动解决技巧

  • 找循环或者频繁调用的地方

Android 内存泄漏介绍及实例演示

相关文章

  • Android 内存抖动介绍及实例演示

    一、内存抖动介绍 定义:内存频繁分配和回收导致内存不稳定表现:频繁 GC、内存曲线呈锯齿状危害:导致卡顿、OOM ...

  • Android 内存泄漏介绍及实例演示

    一、内存泄漏介绍 定义:内存中存在已经没有用的对象表现:内存抖动、可用内存逐渐减少危害:内存不足、GC 频繁、OO...

  • App内存优化

    1.内存优化介绍及工具选择 2.Android内存管理机制 3. 内存抖动解决实战 4. 内存泄露解决实战 hpr...

  • Android内存抖动——检测、常见场景、处理

    内存抖动 介绍:内存抖动是Android性能优化中内存优化的一种情况,主要是由于频繁的对象创建导致内存抖动,最终可...

  • Android 性能优化-内存抖动

    本文将了解内存抖动是什么以及内存抖动发生的原因及常见解决办法 内存抖动是什么 内存抖动:内存抖动实际上就是内存频繁...

  • 垃圾回收及内存调试工具的介绍

    Android应用性能优化 内存的优化 垃圾回收及内存调试工具的介绍#### 概要: Android的Genera...

  • Android内存基础——内存抖动

    个人博客CoorChice,https://chenbingx.github.io/ ,最新文章将会首发Coor...

  • Android性能优化之内存篇

    android的内存优化一般从以下几个方面考虑: 内存泄漏 内存抖动 Bitmap 代码质量优化 内存泄漏 内存泄...

  • Android内存抖动分析

    1.为什么会内存抖动简单说就是在短时间内有大量的gc操作2.举个例子 点击按钮进行字符串的拼接我们知道String...

  • Android内存管理(二)

    Android内存性能主要包括内存泄漏,内存抖动,内存持续增长(但GC后会下降),内存占用过大等问题。 Andro...

网友评论

      本文标题:Android 内存抖动介绍及实例演示

      本文链接:https://www.haomeiwen.com/subject/otbndctx.html