部分情况下内存用量较高的原因分析

CL 2020/8/25 发布 · 2020/8/25 更新 · 4540 次阅读

原因1

在长时间运行的动作中,持续循环导致GC线程没有机会进行垃圾回收。

解决方法:

- 中止后台动作。

- 在需要长时间运行的动作的循环(每个/重复等)模块中,增加几个毫秒的”等待时间“。(”重复“模块可以直接在参数中设置循环间隔时间)

 

原因2

在编辑较为复杂的组合动作时,会占用较多内存:

- 编辑界面比较复杂,每个步骤会需要一个界面组件(包含了很多子组件)来显示。

- 动作undo/redo历史记录。 每条记录相对于整个动作的一个副本,一共会保存100个副本。如果动作有1M大小,历史记录就会占用100M的内存。由于内部的实现机制,实际占用会比这个更多一些。

正常情况下,这个内存会在关闭编辑窗口一段时间后自动释放。

 

===

很多情况下可能是上述2个因素的结合。

编辑动作后,即便关闭了编辑窗口,因为运行中的动作持续循环导致服务进行内存回收,编辑窗口的内存得不到释放。在多次打开和关闭动作编辑窗口后,就会累计较多的内存占用了。

 

Quicker正常占用内存100-200M左右。

如果你遇到了大内存占用不释放的情况,并且没有运行长期动作、没有打开的编辑动作窗口,那么可以创建一个转储文件发给CL分析一下。

 

· {{comment.createTimeStr}}
{{reply.votePoints}}
回复   – {{reply.createTimeStr}}
回复 x
标签
目录
相关操作