【发布时间】:2015-01-07 21:30:43
【问题描述】:
Dart 存在一些问题。似乎一段时间后垃圾收集器无法清除 VM 中的内存,因此应用程序挂起。有这个问题的人吗?有内存限制吗?
【问题讨论】:
-
我还没有看到任何类似的报道。你试过用天文台dartlang.org/tools/observatory调查吗?
标签: memory garbage-collection dart freeze
Dart 存在一些问题。似乎一段时间后垃圾收集器无法清除 VM 中的内存,因此应用程序挂起。有这个问题的人吗?有内存限制吗?
【问题讨论】:
标签: memory garbage-collection dart freeze
您应该重复使用您的对象,而不是创建新对象。您应该使用池模式:
http://en.wikipedia.org/wiki/Object_pool_pattern
小心画布,它是适当的破坏。
另一篇 GC 性能论文:
http://blog.tojicode.com/2012/03/javascript-memory-optimization-and.html
【讨论】:
有内存限制吗?
是的。 Dart 显然以可以在启动时配置的最大大小运行:
(以下适用于所有垃圾收集语言...)
如果您的应用程序开始用完空间(即堆正在慢慢填充 GC 无法删除的对象),那么您可能会遇到令人讨厌的情况,即 GC 运行得越来越频繁,并设法回收每次的内存越来越少。最终您会耗尽内存,但在此之前应用程序会变得非常缓慢。
解决方案通常是执行以下一项或两项操作:
找出导致内存耗尽的原因。通常不是您分配了太多对象。相反,典型的原因是所有不需要的对象仍然可以访问......通过您的应用程序构建的一些数据结构。
为 GC 设置“快速死亡”调整选项 .... 如果可用。例如,Java 垃圾收集器可以配置为测量垃圾收集所花费的时间。 (GC 开销。)当 GC 开销超过预设比例时,Java 虚拟机会抛出 OutOfMemoryError 来“拔掉插头”。
【讨论】: