我们在Dart遇到了一些问题。似乎在一段时间后垃圾收集器无法清除VM中的内存,因此应用程序会挂起。有这个问题的人吗?有没有内存限制?
答案 0 :(得分:2)
您应该重复使用对象而不是创建新对象。你应该使用池模式:
http://en.wikipedia.org/wiki/Object_pool_pattern
小心帆布及其适当的破坏。
另一份GC绩效文件:
http://blog.tojicode.com/2012/03/javascript-memory-optimization-and.html
答案 1 :(得分:2)
是否有内存限制?
是。 Dart显然以最大尺寸运行,可以在发布时配置:
(以下内容适用于所有垃圾收集语言......)
如果您的应用程序开始耗尽空间(即堆正在慢慢归档GC无法删除的对象),那么您可能会遇到GC越来越频繁运行的恶劣情况,并设法回收每次记忆越来越少。最终你的内存耗尽,但在此之前,应用程序变得非常慢。
解决方案通常是执行以下一项或两项操作:
查找导致内存耗尽的原因。通常不是您分配太多对象。相反,典型的原因是通过应用程序构建的某些数据结构,仍然可以访问不需要的对象。
设置GC的“快速死亡”调整选项....如果可用。例如,Java垃圾收集器可以配置为测量垃圾收集所花费的时间。 (GC开销。)当GC开销超过预设比率时,Java虚拟机会抛出OutOfMemoryError
以“拔插”。