There are two memory leaks on the DirectiveSet::DisableIntrinsicOption char array.
(1) DirectiveSet::clone() overwrites this->DisableIntrinsicOption without freeing the old array.
(2) If DisableIntrinsic is set inside -XX:CompileCommand, then compilecommand_compatibility_init() overwrites set->DisableIntrinsicOption without freeing the old array.
The memory leak only exhibits if any value for -XX:CompileCommand is set on command line. The first leak easily causes 200MB-500MB memory leak per instance in production servers.
Note that this leak happens even if -XX:DisableIntrinsic is not set. Because DirectiveSet::canonicalize_disableintrinsic() allocates one-byte empty string "\0" that still gets leaked.