Summary
-------
Extend `jcmd Compiler.perfmap` with an optional option `filename` to create a symbol mappings file for the linux perf different from the default `/tmp/perf-%d.map`.
Problem
-------
The current implementation of `jcmd Compiler.perfmap` writes the perf map to a hard-coded file name: `/tmp/perf-%d.map` where `%d` is a java process ID. The hard-coded file name is inconvenient for long running applications where symbol mappings change because of code changes in CodeCache. These changes must be reflected in the perf map file before any run of `perf record`. If we run `perf record` multiple times, we must preserve the previously created perf map file before each of the runs. Otherwise the perf map file will be overwritten and perf report will be incorrect. A workaround is to rename the previously created map file before running perf record. With an ability to specify a filename, we would not need the workaround.
Solution
--------
`PerfMapDCmd` will inherit from `DCmdWithParser` to accept an additional argument `filename` which is optional. If it is provided, the perf map will be written to the specified filename. Otherwise, the perf map file will be written to `/tmp/perf-%d.map` where `%d` is a java process ID.
Specification
-------------
- `jcmd Compiler.perfmap` is unchanged and creates `/tmp/perf-%d.map`.
- `jcmd Compiler.perfmap <file>` creates the map file at the specified `<file>`.
- `jcmd PID help Compiler.perfmap` provides the following usage.
```
Compiler.perfmap [arguments] (Linux only)
Write map file for Linux perf tool.
Impact: Low
arguments:
• filename: (Optional) Name of the map file (STRING, no default value)
If filename is not specified, a default file name is chosen using the pid of the tar
get JVM process. For example, if the pid is 12345, then the default filename will be
/tmp/perf-12345.map.
```