yb_lin

导航

erlang VM中的atom个数限制

在erlang 中,atom可以理解成常量,它可以包含任何字符,以小写字母开头,如果不是以小写字母开头或者是字母之外的符号,需要用单引号包括起来,比如abc,’AB’。atom的匹配速度非常快,但是由于erlang VM将所有模块的atom保存在一个全局的atom表中,它的最大限制是1048576,也就是说erlang的VM只能处理1048576个不同的atom,当atom的个数大于这个限制时,VM就会down掉。所以当你的模块中使用了list_to_atom函数生成动态的atom时就要非常的注意是否会产生大量的不同atom。

通常我们可以通过以下命令查看系统中使用的atom个数:
2> string:tokens(binary_to_list(erlang:system_info(info)),”\n”).
["=memory","total: 3496784","processes: 340000",
 "processes_used: 332584","system: 3156784","atom: 253929",
 "atom_used: 251649","binary: 79064","code: 1752674",
 "ets: 114328","=hash_table:atom_tab","size: 4813",
 "used: 3389","objs: 5902","depth: 7",
 "=index_table:atom_tab","size: 6144","limit: 1048576",
 "entries: 5902","=hash_table:module_code","size: 97",
 "used: 57","objs: 72","depth: 3","=index_table:module_code",
 "size: 1024","limit: 65536","entries: 72",
 [...]|…]
3>
看到”=index_table:atom_tab”,”size: 6144″,”limit: 1048576″,行,当前使用了6144个atom。

posted on 2010-08-04 10:11  废铁  阅读(1354)  评论(0编辑  收藏  举报