sec*_*rve 5 erlang garbage-collection
据说原子不是垃圾收集的.一旦你创建了一个原子,它就会保留在原子表中,这可能会在一天结束时导致内存泄漏!
我对Erlang很新,我的问题是:原子如何被垃圾收集?如果不可能,如何最大限度地减少这种影响?
Chi*_*ron 12
除非您动态创建原子,否则原子不会出现问题.如果你这样做了,那么你正在试图让Erlang系统崩溃.
如何动态创建Atoms?例如,在循环内调用list_to_atom函数.
如果您对Erlang垃圾收集感兴趣,请阅读Joe Armstrong撰写的这篇论文:One Pass Real-Time Generation-Mark-Sweep Garbage Collection(1995).
始终牢记:不要动态创建原子!
好吧有时你可能需要动态创建一个Atom但不要过度使用它!
虽然我不确定原子是垃圾收集的,但您可以轻松地做到,而不必担心是否会炸毁系统的内存.正如@Chiron所说,只要你的所有原子在编译时都知道,你应该没问题.
如果我真的需要以list_to_atom/1某种方式使用该怎么办?好吧,您可以使用这种功能扭转您的问题:
atom("apple") -> apple;
atom("orange") -> orange;
atom("banana") -> banana.
Run Code Online (Sandbox Code Playgroud)
另一种解决方法是 list_to_existing_atom/1
但VM仍然可以占用越来越多的RAM:其他连接的Erlang节点可以全局注册原子,即在运行时分配原子.
| 归档时间: |
|
| 查看次数: |
1290 次 |
| 最近记录: |