原因1
在长时间运行的动作中,持续循环导致GC线程没有机会进行垃圾回收。
解决方法:
- 中止后台动作。
- 在需要长时间运行的动作的循环(每个/重复等)模块中,增加几个毫秒的”等待时间“。(”重复“模块可以直接在参数中设置循环间隔时间)
原因2
在编辑较为复杂的组合动作时,会占用较多内存:
- 编辑界面比较复杂,每个步骤会需要一个界面组件(包含了很多子组件)来显示。
- 动作undo/redo历史记录。 每条记录相对于整个动作的一个副本,一共会保存100个副本。如果动作有1M大小,历史记录就会占用100M的内存。由于内部的实现机制,实际占用会比这个更多一些。
正常情况下,这个内存会在关闭编辑窗口一段时间后自动释放。
===
很多情况下可能是上述2个因素的结合。
编辑动作后,即便关闭了编辑窗口,因为运行中的动作持续循环导致服务进行内存回收,编辑窗口的内存得不到释放。在多次打开和关闭动作编辑窗口后,就会累计较多的内存占用了。
Quicker正常占用内存100-200M左右。
如果你遇到了大内存占用不释放的情况,并且没有运行长期动作、没有打开的编辑动作窗口,那么可以创建一个转储文件发给CL分析一下。