内存泄漏的概念

百度百科:

内存泄漏(Memory Leak)是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。

autojs版本

autojs官方文档自带示例

// autojs官网: https://pro.autojs.org/docs/#/zh-cn/debug
$debug.setMemoryLeakDetectionEnabled(true);
requestScreenCapture();for (let i = 0; i < 10; i++) {// 这个图片本应手动调用recycle回收let leak = captureScreen().clone();// 我们故意注释掉回收的代码// leak.recycle();
}

autojs开发者定的规矩

图片相关代码

除了截图不用主动回收图片,

其他图片处理, 一律必须主动回收

img.recycle();

截图不会内存泄露

$debug.setMemoryLeakDetectionEnabled(true);
requestScreenCapture();for (let i = 0; i < 10; i++) {img = captureScreen();sleep(10);img = captureScreen();sleep(10);img = captureScreen();sleep(10);img = captureScreen();
}

找色不会内存泄露

$debug.setMemoryLeakDetectionEnabled(true);
if (!requestScreenCapture()) {toast("请求截图失败");exit();
}
var img = captureScreen();
toastLog("开始找色");
//指定在位置(100, 220)宽高为400*400的区域找色。
//#75438a是编辑器默认主题的棕红色字体(数字)颜色,位置大约在第5行的"2000",坐标大约为(283, 465)
var point = findColorInRegion(img, "#75438a", 90, 220, 900, 1000);
if (point) {toastLog("x = " + point.x + ", y = " + point.y);
} else {toastLog("没有找到");
}

找图, 会内存泄露

$debug.setMemoryLeakDetectionEnabled(true);
requestScreenCapture();var bigImg = captureScreen();
var smallImg = images.clip(bigImg, 10, 10, 200, 200);
var point = findImage(bigImg, smallImg);
toastLog(point);
// 不主动回收, 就会内存泄露
// bigImg.recycle();
// smallImg.recycle();

灰度化图片, 会内存泄露

$debug.setMemoryLeakDetectionEnabled(true);
requestScreenCapture();var img = captureScreen();
let grayImg = images.grayscale(img); // 灰度化图片
// 不主动回收, 就会内存泄露
// grayImg.recycle();

嵌套函数处理图片, 会内存泄露

$debug.setMemoryLeakDetectionEnabled(true);
requestScreenCapture();let img = captureScreen();
let thresholdImg = images.threshold(images.grayscale(img), 100, 200);
// 有两张图片, 你只回收了一张
thresholdImg.recycle();

正确的做法: 不要嵌套函数处理图片

$debug.setMemoryLeakDetectionEnabled(true);
requestScreenCapture();let img = captureScreen();
let grayscaleImg = images.grayscale(img);
let thresholdImg = images.threshold(grayscaleImg, 100, 200);
grayscaleImg.recycle();
thresholdImg.recycle();

微信公众号 AutoJsPro教程

QQ群

747748653

autojs之内存泄露相关推荐

  1. Android中出现内存泄露的原因

    短生命周期的对象持有了长生命周期的对象,使得短生命周期对象驻留内存,消耗内存,因为无法让垃圾回收器GC验证这些对象是否不再被使用,无法释放这些内存. 以下会造成内存泄露: a.数据库的cursor没有 ...

  2. Linux下正确使用getifaddrs()函数避免内存泄露

    工作中使用valgrind检测内存泄露时,发现getifaddrs()很容易导致内存泄露,下面是正确的代码: //get local ip of network card //gcc -g get_a ...

  3. 使用valgrind检测ATS插件中的内存泄露

    一.内存错误出现的场景 这几天在重构ATS插件代码的过程中遇到了烦人的内存泄露问题, 周五周六连续两天通过走查代码的方法,未能看出明显的导致内存错误的代码, 同时也觉得C和C++混合编程得到一个动态库 ...

  4. 在Ubuntu 14.04 64bit上安装Valgrind并检查内存泄露

    valgrind官网:http://valgrind.org/ 1.安装方法 第一种方式:下载目前最新的源码,编译安装,在服务器上推荐这种方式 wget http://valgrind.org/dow ...

  5. ATS插件开发中内存泄露问题的解决方法探讨

    接触ATS开发已经有几年了,开发过内核的模块,也从事过插件的开发.内存泄露问题一直是一个困扰大多数ATS开发者的头疼的问题,下面说说我自己的感受和思考.这里这关注ATS插件开发这个话题.源码的exam ...

  6. 通过define _CRTDBG_MAP_ALLOC宏来检测windows上的code是否有内存泄露

    VS中自带了内存泄露检测工具,若要启用内存泄露检测,则在程序中包括以下语句: #define _CRTDBG_MAP_ALLOC #include <crtdbg.h> 它们的先后顺序不能 ...

  7. Ubuntu下内存泄露检测工具Valgrind的使用

    在VS中可以用VLD检测是否有内存泄露,可以参考http://blog.csdn.net/fengbingchun/article/details/44195959,下面介绍下Ubuntu中内存泄露检 ...

  8. OpenCV中的内存泄露问题(cvLoadImage,cvCloneImage)

    转自:http://apps.hi.baidu.com/share/detail/30893646 在做项目的过程中,使用OpenCV经常会出现一些内存泄露问题,自己编写的程序出现问题还情有可原,但若 ...

  9. python会不会出现内存泄露_Python内存泄漏和内存溢出的解决方案

    一.内存泄漏 像Java程序一样,虽然Python本身也有垃圾回收的功能,但是同样也会产生内存泄漏的问题. 对于一个用 python 实现的,长期运行的后台服务进程来说,如果内存持续增长,那么很可能是 ...

最新文章

  1. 主题:CS0016: 未能写入输出文件“c:#92;WINDOWS#92;Microsoft.NET#92;***.dll”错误处理...
  2. Android中的多线程(字节跳动)
  3. 服务器系统ghost版 raid,服务器在raid5下做系统ghost备份.docx
  4. linux系统如何使用fork函数创建子进程
  5. 第六节:又一种新的数据类型:元组Tuple
  6. Python中的具名元组类用法
  7. js 内置对象的方法
  8. 《MATLAB R2012a超级学习手册》一第1章 MATLAB概述
  9. Java添加过期注解
  10. Python numpy 中 keepdims 的含义
  11. 2021年2 分以上优秀护理相关SCI 期刊汇总
  12. MAC电脑新手入门指南
  13. VS报错:当前页面的脚本发生错误
  14. 行列式与矩阵的初等变换总结
  15. 【MQTT】SpringBoot集成MQTT
  16. unicloud云开发---uniapp云开发(一)---服务空间创建以及部署一个云函数
  17. 分享:制作属于自己的O'REILLY“动物书”封面
  18. 宝塔使用心得--快速部署javaweb应用
  19. Android图片转换
  20. Linux 中 find 命令如何使用,附 35 个实际例子

热门文章

  1. MySQL数据库三段式_对数据库模式进行规范化处理,是在数据库设计的什么阶段?...
  2. QT MV\MVC结构
  3. 如何进行安全技术交底
  4. matlab之ones函数和zeros函数
  5. 长连接,短连接,心跳
  6. 黄瓜明明是绿色的,为何叫黄瓜?
  7. sscanf函数 linux 物理cpu信息,计算机操作系统实验课程教案2016.doc
  8. FreeMaker模板引擎
  9. 7.5 findall()方法
  10. 练手小项目(5)安全卫士_程序锁