代码改变世界

erlang垃圾收集器不会收集基元是erlang到一个内存管理特性

2012-04-23 22:48  rhinovirus  阅读(658)  评论(0)    收藏  举报

  erlang垃圾收集器不会收集基元是erlang到一个内存管理特性。一旦你生成了一个基元,那么不管代码中是否被引用它都会停留在基元表里。

如果决定在一个瞬时的进程注册别名,而该别名是通过内置函数 list_to_atom把一个字符串转换为一个基元而得到的,这就可能是一个潜在的问题。

如果每天有数以百万计的用户登录系统,而你为他们到每一个会话都建立一个已注册的进程,那么请不要惊讶最终将耗尽内存。

  把用户到进程标识符的映射保存到一个会话表(session table)中对于你可能会更好些。最好是只注册生命周期长到进程,如果你真到必须将字符

串转换为一个别名,请使用 list_to_existing_atom/1,用以确保你的系统不会遭受内存泄漏

 

摘自《Erlang编程指南》 109页