-
Notifications
You must be signed in to change notification settings - Fork 557
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Bug反馈: 在pro8.8上存在内存溢出的日志 #497
Comments
暂时无法解决 但警告日志暂时没有办法去除或 suppress 掉 此 issue 将标记为 '无法完成' |
目前已找到可能的解决方案 |
内存泄漏似乎挺严重的。我测试了下,打开autojs后占用是300+M的,运行两次后去到了900+ |
那我找aj的作者再问问,多谢回复 |
我看了一下内存泄露的位置,貌似ext_image模块里面的capt函数里的 _copy局部变量因为不是captureScreen方法存放image,并且要被return,所以没有办法对该变量进行手动内存回收? 这个问题我尝试在ext_image开头用let声明了一个全局变量并赋值为null,然后在capt()函数中把所有_copy替换为该全局变量。同时每次进入capt()函数以后都先判断这个全局变量是否为null(或者判断是否为ImageWrapper),如果非null(或者为ImageWrapper)则执行一次recycle内存回收,再执行原有语句和逻辑。
这么一通乱操作后,再执行回收能量球的任务时,能正常采集能量,log里也没有内存溢出的日志了,不知道是不是真的不会溢出了。我明天早上高强度持续收能量的时候再测一下私改代码后的效果。 |
难受了,ext-image里还有几个lambda函数里也有类似的内存溢出。 大概知道内存溢出的意思了,就是小函数里获取到图片,但是没有释放就直接return。实际执行return操作的时候,内存中并没有释放image资源,只是copy了一份返回给函数调用者。因此在函数调用者里执行recycle只回收了copy,并不能完全避免内存泄露。 不知道我理解的对不对?毕竟我平时干活只写cpp和py代码,js只能看懂简单语法。。。 |
v2.1.7 已尝试解决上述内存溢出问题 如问题复现 可继续反馈 关于内存溢出可能的解决方案及此次更新相关的代码改动 将在本周四之后在当前issue下作出答复 |
感觉这几版以后,没再遇到内存溢出导致收能量挂掉的问题了 |
images.captureScreen() 创建一个 ImageWrapper images.requestScreenCapture();
let capt_1 = images.captureScreen();
console.log(capt_1.getHeight()); // a certain number
let capt_2 = images.captureScreen();
console.log(capt_2.getHeight()); // a certain number
console.log(capt_1.getHeight()); // exception with "image has been recycled" 项目主要在两个地方需要破除上述限制
两个样本池都需要在一定时间内获取多个屏幕截图 早期项目采用了 images.copy() 的方式 images.requestScreenCapture();
let capt_1 = images.copy(images.captureScreen());
console.log(capt_1.getHeight()); // a certain number
let capt_2 = images.copy(images.captureScreen());
console.log(capt_2.getHeight()); // a certain number
console.log(capt_1.getHeight()); // a certain number 这样避免 ImageWrapper 实例被自动回收 capt_1.recycle();
capt_2.recycle(); 早期项目采用了所有 imagesx.capt() 都返回 images.copy() 后的对象 Pro 的内存泄漏跟踪会显示详细的 stack images.captureScreen() 的自动回收其实可以很好地解决资源开销 function matchTemplate(img: ImageWrapper$, template: ImageWrapper$, options?: {
threshold?: number,
weakThreshold?: number,
level?: number,
region?: [X?, Y?, Width?, Height?],
max?: number,
}): Autojs.MatchingResult; 通常 img 会传入屏幕截图 function findImage(img: ImageWrapper$, template: ImageWrapper$, options?: {
threshold?: number, weakThreshold?: number, level?: number,
region?: [X?, Y?, Width?, Height?]}): org.opencv.core.Point;
function findImageInRegion(image: ImageWrapper$, template: ImageWrapper$, x?: X, y?: Y,
width?: Width, height?: Height, threshold?: number): org.opencv.core.Point;
function concat(img1: ImageWrapper$, img2: ImageWrapper$,
direction?: "LEFT" | "RIGHT" | "TOP" | "BOTTOM"): ImageWrapper$; 另外如果脚本提前停止或异常终止 下一版项目将采用 images 对象池的方案 最后来一个简单的小 puzzle images.requestScreenCapture();
let _capt = images.captureScreen();
let _template = (sleep(500), images.captureScreen());
console.log(images.matchTemplate(_capt, _template).matches.length === 0); |
貌似还是会有内存泄漏的问题,重启进程后Runtime Heap和Process Heap都是3%左右,每运行一次就增加一点,直到内存溢出Auto.js卡死,这里大概运行了50次。 # @SuperMonster003 软件硬件信息 |
同楼上,2.1.10版本内存溢出又回来了。。 |
问题描述
在AJ Pro8上有看到内存溢出的日志,虽说暂时不会真的挂掉,但是总看着闹心。不知道根据日志能不能少溢出一点?
日志截图

软件硬件信息
操作系统: Android 11 MIUI 12.5
设备型号: 小米10Pro
Auto.js版本: Pro8.8
项目版本: 2.1.5
其他
另外,不知道为什么,我的机子上无论是411还是pro8,都只能点亮屏幕而不能解锁。隔壁的蚂蚁森林脚本却能解锁
The text was updated successfully, but these errors were encountered: