AutoJs6
AutoJs6 copied to clipboard
执行脚本时 JS引擎的内存占用问题
发现执行多个任务后,App占用内存一直在上升,所以想问一下:
是否有方式可以在一个脚本执行完成后、清空 JS引擎的内存占用? 在下一个脚本执行的时候,再重新给 JS引擎初始化?
同问,楼主解决了吗
Rhino 脚本引擎本身是纯 Java 对象, 结束脚本只有在所有强引用断开且 GC 触发后才会真正回收.
AutoJs6 在 ScriptRuntime 里保存了引擎对象本身 ScriptEngine, 全局作用域 Scriptable scope, 线程, Timer, Handler 等, 其中任意一个没被释放, 整条对象链都会留在堆里.
例如某些静态变量存放了 Context 或 Scriptable, 导致整棵对象树都被留存而无法回收, 再如有些 Context 不恰当使用 Activity 而非 ApplicationContext 上下文等.
AutoJs6 项目是庞大的, 一些隐蔽的或是被忽略的问题, 可能恰恰是导致所有对象无法完美被回收的原因.
目前能做的, 也只能是等待项目开发者及合作者自行检查发现并解决这些问题 (如利用 Android Studio / IntelliJ IDEA 的 Memory Profiler 或 LeakCanary 等).
而脚本开发者, 可以尝试在中在合适的位置显式调用 exit();, 以使脚本线程与定时器尽量全部退出.