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。