<div dir="ltr">It looks like attribute list is stored in `term_to_binary` format inside of a .beam file.<div><br></div><div>So, each time you call `M:module_info(attributes)`, it decodes whole attribute list using `binary_to_term`:</div><div><br></div><div><a href="https://github.com/erlang/otp/blob/ddaed7774eb0a3bbaf6ee40153d2b082181a1223/erts/emulator/beam/beam_load.c#L6143">https://github.com/erlang/otp/blob/ddaed7774eb0a3bbaf6ee40153d2b082181a1223/erts/emulator/beam/beam_load.c#L6143</a><br></div><div><br></div><div>That may be ok for small list, but you, probably, have a lot of them (how many?).</div><div><br></div><div>Another question is how did you lookup this attribute list? lists:keyfind? This one, obviously, may be slow on a large lists.</div><div><br></div><div>But, at least, it doesn't look like `module_info(attributes)` uses any locks.</div></div>