JCMD(1)

๐Ÿ“ฆ version 17.0.21.0.3.u1, in arch rolling

๐Ÿ’– JCMD(1) โ€” send diagnostic command requests to a running Java Virtual Machine (JVM) ๐Ÿ’–

๐ŸŒธ NAME ๐ŸŒธ

okay so bestie, jcmd is the utility that sends diagnostic command requests to a running Java Virtual Machine (JVM). that's the whole assignment. ๐Ÿ’…

โœจ SYNOPSIS โœจ

here's the shape of it, no cap:

jcmd [pid | main-class] command...  | PerfCounter.print | -f filename

jcmd [-l]

jcmd -h
  • pid โ€” When used, the jcmd utility sends the diagnostic command request to the process ID for the Java process.
  • main-class โ€” When used, the jcmd utility sends the diagnostic command request to all Java processes with the specified name of the main class.
  • command โ€” The command must be a valid jcmd command for the selected JVM. The list of available commands for jcmd is obtained by running the help command (jcmd pid help) where pid is the process ID for the running Java process. If the pid is 0, commands will be sent to all Java processes. The main class argument will be used to match, either partially or fully, the class used to start Java. If no options are given, it lists the running Java process identifiers with the main class and command-line arguments that were used to launch the process (the same as using -l).
  • Perfcounter.print โ€” Prints the performance counters exposed by the specified Java process.
  • -f filename โ€” Reads and executes commands from a specified file, filename.
  • -l โ€” Displays the list of Java Virtual Machine process identifiers that are not running in a separate docker process along with the main class and command-line arguments that were used to launch the process. If the JVM is in a docker process, you must use tools such as ps to look up the PID.
Note: Using jcmd without arguments is the same as using jcmd -l.
  • -h โ€” Displays the jcmd utility's command-line help.

๐Ÿฆ‹ DESCRIPTION ๐Ÿฆ‹

The jcmd utility is used to send diagnostic command requests to the JVM. It must be used on the same machine on which the JVM is running, and have the same effective user and group identifiers that were used to launch the JVM. Each diagnostic command has its own set of arguments. To display the description, syntax, and a list of available arguments for a diagnostic command, use the name of the command as the argument. For example:

jcmd pid help command

If arguments contain spaces, then you must surround them with single or double quotation marks (' or "). In addition, you must escape single or double quotation marks with a backslash (\) to prevent the operating system shell from processing quotation marks. Alternatively, you can surround these arguments with single quotation marks and then with double quotation marks (or with double quotation marks and then with single quotation marks).

If you specify the process identifier (pid) or the main class (main-class) as the first argument, then the jcmd utility sends the diagnostic command request to the Java process with the specified identifier or to all Java processes with the specified name of the main class. You can also send the diagnostic command request to all available Java processes by specifying 0 as the process identifier.

๐Ÿ‘‘ COMMANDS FOR JCMD ๐Ÿ‘‘

The command must be a valid jcmd diagnostic command for the selected JVM. The list of available commands for jcmd is obtained by running the help command (jcmd pid help) where pid is the process ID for a running Java process. If the pid is 0, commands will be sent to all Java processes. The main class argument will be used to match, either partially or fully, the class used to start Java. If no options are given, it lists the running Java process identifiers that are not in separate docker processes along with the main class and command-line arguments that were used to launch the process (the same as using -l).

The following commands are available:

๐ŸŽ€ help [options] [arguments]

For more information about a specific command.

arguments:

  • command name: The name of the command for which we want help (STRING, no default value)
Note: The following options must be specified using either key or key=value syntax.

options:

  • -all: (Optional) Show help for all commands (BOOLEAN, false).

๐ŸŽ€ Compiler.codecache

Prints code cache layout and bounds.

Impact: Low

Permission: java.lang.management.ManagementPermission(monitor)

๐ŸŽ€ Compiler.codelist

Prints all compiled methods in code cache that are alive.

Impact: Medium

Permission: java.lang.management.ManagementPermission(monitor)

๐ŸŽ€ Compiler.queue

Prints methods queued for compilation.

Impact: Low

Permission: java.lang.management.ManagementPermission(monitor)

๐ŸŽ€ Compiler.directives_add *filename* *arguments*

Adds compiler directives from a file.

Impact: Low

Permission: java.lang.management.ManagementPermission(monitor)

arguments:

  • filename: The name of the directives file (STRING, no default value)

๐ŸŽ€ Compiler.directives_clear

Remove all compiler directives.

Impact: Low

Permission: java.lang.management.ManagementPermission(monitor)

๐ŸŽ€ Compiler.directives_print

Prints all active compiler directives.

Impact: Low

Permission: java.lang.management.ManagementPermission(monitor)

๐ŸŽ€ Compiler.directives_remove

Remove latest added compiler directive.

Impact: Low

Permission: java.lang.management.ManagementPermission(monitor)

๐ŸŽ€ GC.class_histogram [options]

Provides statistics about the Java heap usage.

Impact: High --- depends on Java heap size and content.

Permission: java.lang.management.ManagementPermission(monitor)

Note: The options must be specified using either key or key=value syntax.

options:

  • -all: (Optional) Inspects all objects, including unreachable objects (BOOLEAN, false)

๐ŸŽ€ GC.finalizer_info

Provides information about the Java finalization queue.

Impact: Medium

Permission: java.lang.management.ManagementPermission(monitor)

๐ŸŽ€ GC.heap_dump [options] [arguments]

Generates a HPROF format dump of the Java heap.

Impact: High --- depends on the Java heap size and content. Request a full GC unless the -all option is specified.

Permission: java.lang.management.ManagementPermission(monitor)

Note: The following options must be specified using either key or key=value syntax.

options:

  • -all: (Optional) Dump all objects, including unreachable objects (BOOLEAN, false)

arguments:

  • filename: The name of the dump file (STRING, no default value)

๐ŸŽ€ GC.heap_info

Provides generic Java heap information.

Impact: Medium

Permission: java.lang.management.ManagementPermission(monitor)

๐Ÿ”ฅ GC.run

Calls java.lang.System.gc().

Impact: Medium --- depends on the Java heap size and content.

๐Ÿ”ฅ GC.run_finalization

Calls java.lang.System.runFinalization().

Impact: Medium --- depends on the Java content.

๐ŸŒˆ JFR.check [options]

Show information about a running flight recording

Impact: Low

Note: The options must be specified using either key or key=value syntax. If no parameters are entered, information for all active recordings is shown.

options:

  • name: (Optional) Name of the flight recording. (STRING, no default value)
  • verbose: (Optional) Flag for printing the event settings for the recording (BOOLEAN, false)

๐ŸŒˆ JFR.configure [options]

Set the parameters for a flight recording

Impact: Low

Note: The options must be specified using either key or key=value syntax. If no parameters are entered, the current settings are displayed.

options:

  • globalbuffercount: (Optional) Number of global buffers. This option is a legacy option: change the memorysize parameter to alter the number of global buffers. This value cannot be changed once JFR has been initalized. (STRING, default determined by the value for memorysize)
  • globalbuffersize: (Optional) Size of the global buffers, in bytes. This option is a legacy option: change the memorysize parameter to alter the size of the global buffers. This value cannot be changed once JFR has been initalized. (STRING, default determined by the value for memorysize)
  • maxchunksize: (Optional) Maximum size of an individual data chunk in bytes if one of the following suffixes is not used: 'm' or 'M' for megabytes OR 'g' or 'G' for gigabytes. This value cannot be changed once JFR has been initialized. (STRING, 12M)
  • memorysize: (Optional) Overall memory size, in bytes if one of the following suffixes is not used: 'm' or 'M' for megabytes OR 'g' or 'G' for gigabytes. This value cannot be changed once JFR has been initialized. (STRING, 10M)
  • repositorypath: (Optional) Path to the location where recordings are stored until they are written to a permanent file. (STRING, The default location is the temporary directory for the operating system. On Linux operating systems, the temporary directory is /tmp. On Windwows, the temporary directory is specified by the TMP environment variable.)
  • stackdepth: (Optional) Stack depth for stack traces. Setting this value greater than the default of 64 may cause a performance degradation. This value cannot be changed once JFR has been initialized. (LONG, 64)
  • thread_buffer_size: (Optional) Local buffer size for each thread in bytes if one of the following suffixes is not used: 'k' or 'K' for kilobytes or 'm' or 'M' for megabytes. Overriding this parameter could reduce performance and is not recommended. This value cannot be changed once JFR has been initialized. (STRING, 8k)
  • samplethreads: (Optional) Flag for activating thread sampling. (BOOLEAN, true)

๐ŸŒˆ JFR.dump [options]

Write data to a file while a flight recording is running

Impact: Low

Note:

Like, the options have to be written with either key or key=value syntax โ€” that's the only way. And no, nothing is required, bestie. Your recording keeps running after the data gets written, so no stress there. ๐Ÿ’…

options:

  • begin โ€” (Optional) The start of the time window for the recording data that gets included in the dump file. Format is local time. (STRING, no default value)
  • end โ€” (Optional) The end of the time window for the recording data that gets included in the dump file. Format is local time. (STRING, no default value)
Note: for both begin and end, the time has to be in a format that java.time.LocalTime::parse(STRING), java.time.LocalDateTime::parse(STRING) or java.time.Instant::parse(STRING) can read. For example, "13:20:15", "2020-03-17T09:00:00" or "2020-03-17T09:00:00Z".
Note: the begin and end times line up with the timestamps found inside the recorded information in the flight recording data. iykyk ๐Ÿ•

Another option (hehe) is a time relative to right now, which you write as a negative integer followed by "s", "m" or "h". For example, "-12h", "-15m" or "-30s" โœจ

  • filename โ€” (Optional) The name of the file the flight recording data gets dumped into. If you don't give a filename, one gets generated from the PID and the current date. The filename can also be a directory, in which case the filename is generated from the PID and the current date inside that directory you specified. (STRING, no default value)
  • maxage โ€” (Optional) How long a length of time for dumping the flight recording data to a file. (INTEGER followed by 's' for seconds, 'm' for minutes or 'h' for hours, no default value)
  • maxsize โ€” (Optional) The maximum size for the amount of data to dump from a flight recording, in bytes โ€” that's if you don't use one of these suffixes: 'm' or 'M' for megabytes OR 'g' or 'G' for gigabytes. (STRING, no default value)
  • name โ€” (Optional) The name of the recording. If you don't give a name, data from all recordings gets dumped. (STRING, no default value)
  • path-to-gc-root โ€” (Optional) A flag for saving the path to garbage collection (GC) roots at the moment the recording data gets dumped. This path info is genuinely useful for hunting down memory leaks, but collecting it can make your app pause for a short period of time ๐Ÿ˜ญ so only turn this flag on when you actually suspect your application has a memory leak. (BOOLEAN, false)

๐ŸŒธ JFR.start [options] ๐ŸŒธ

Starts a flight recording. Slay, let's capture some history. ๐ŸŽ€

Impact: Low

Note: the options have to be specified using either key or key=value syntax. If you enter no parameters at all, a recording starts with the default values.

options:

  • delay โ€” (Optional) How long to wait before it actually starts recording (INTEGER followed by 's' for seconds, 'm' for minutes or 'h' for hours, 0s)
  • disk โ€” (Optional) Flag for also writing the data to disk while recording (BOOLEAN, true)
  • dumponexit โ€” (Optional) Flag for writing the recording to disk when the Java Virtual Machine (JVM) shuts down. If it's set to 'true' and you didn't give a value for filename, the recording gets written to a file in the directory where the process was started. The file name is a system-generated name containing the process ID, the recording ID and the current time stamp. (For example: id-1-2019_12_12_10_41.jfr) (BOOLEAN, false)
  • duration โ€” (Optional) How long to record for. Heads up, 0s means forever ๐Ÿ‘‘ (INTEGER followed by 's' for seconds, 'm' for minutes or 'h' for hours, 0s)
  • filename โ€” (Optional) The name of the file the flight recording data gets written to when the recording is stopped. If you don't give a filename, one gets generated from the PID and the current date and placed in the directory where the process was started. The filename can also be a directory, in which case the filename is generated from the PID and the current date inside the directory you specified. (STRING, no default value)
  • maxage โ€” (Optional) Maximum time to keep the recorded data on disk. This parameter is only valid when disk is set to true. Note: 0s means forever. (INTEGER followed by 's' for seconds, 'm' for minutes or 'h' for hours, 0s)
  • maxsize โ€” (Optional) Maximum size of the data to keep on disk, in bytes โ€” that's if you're not using one of these suffixes: 'm' or 'M' for megabytes OR 'g' or 'G' for gigabytes. This parameter is only valid when disk is set to 'true'. The value must not be less than the value for the maxchunksize parameter set with the JFR.configure command. (STRING, 0 (no maximum size))
  • name โ€” (Optional) The name of the recording. If you don't provide a name, one gets generated for you. Write down that generated name, bestie โ€” it shows up in the response to the command and you'll need it for the other commands. (STRING, system-generated default name)
  • path-to-gc-root โ€” (Optional) Flag for saving the path to garbage collection (GC) roots at the end of a recording. This path info is great for finding memory leaks but collecting it is time consuming ๐Ÿ˜ฎโ€๐Ÿ’จ so only turn on this flag when you suspect your application has a memory leak. If the settings parameter is set to 'profile', then the information collected also includes the stack trace from where the potential leaking object was allocated. (BOOLEAN, false)
  • settings โ€” (Optional) The name of the settings file that says which events to record. To specify more than one file, separate the names with a comma (,). Include the path if the file isn't in JAVA-HOME/lib/jfr. These profiles ship with the JDK in the JAVA-HOME/lib/jfr directory: 'default.jfc' โ€” collects a predefined set of information with low overhead, so it has minimal impact on performance and can be used with recordings that run continuously; 'profile.jfc' โ€” provides more data than the 'default.jfc' profile, but with more overhead and impact on performance, so use this configuration for short periods of time when you need more info. Use none to start a recording without a predefined configuration file. (STRING, JAVA-HOME/lib/jfr/default.jfc)

Event settings and .jfc options can be specified using the following syntax:

  • option โ€” (Optional) Specifies the option value to modify. To list the available options, use the JAVA_HOME/bin/jfr tool.
  • event-setting โ€” (Optional) Specifies the event setting value to modify. Use the form: #= To add a new event setting, prefix the event name with '+'.

You can specify values for multiple event settings and .jfc options by separating them with a whitespace. And if there's ever a conflict between a parameter and a .jfc option, the parameter takes precedence โ€” periodt. The whitespace delimiter can be omitted for timespan values, i.e. 20ms. For more info about the settings syntax, see the Javadoc of the jdk.jfr package. ๐Ÿฆ‹


๐Ÿ’œ JFR.stop [options] ๐Ÿ’œ

Stops a flight recording. That's it, that's the vibe.

Impact: Low

Note: the options must be specified using either key or key=value syntax. And if you enter no parameters at all, then no recording is stopped. (Iconic behaviour, honestly.)

options:

  • filename โ€” (Optional) The name of the file the recording gets written to when the recording is stopped. If no path is provided, the data from the recording is discarded ๐Ÿ—‘๏ธ (STRING, no default value)
  • name โ€” (Optional) The name of the recording (STRING, no default value)

๐Ÿงš JVMTI.agent_load [arguments] ๐Ÿงš

Loads a JVMTI native agent.

Impact: Low

Permission: java.lang.management.ManagementPermission(control)

arguments:

  • library path โ€” Absolute path of the JVMTI agent to load. (STRING, no default value)
  • agent option โ€” (Optional) Option string to pass the agent. (STRING, no default value)

๐Ÿ”ฅ JVMTI.data_dump ๐Ÿ”ฅ

Signals the JVM to do a data-dump request for JVMTI.

Impact: High

Permission: java.lang.management.ManagementPermission(monitor)


๐Ÿ‘‘ ManagementAgent.start [options] ๐Ÿ‘‘

Starts the remote management agent.

Impact: Low --- no impact

Note: the following options must be specified using either key or key=value syntax.

options:

  • config.file โ€” (Optional) Sets com.sun.management.config.file (STRING, no default value)
  • jmxremote.host โ€” (Optional) Sets com.sun.management.jmxremote.host (STRING, no default value)
  • jmxremote.port โ€” (Optional) Sets com.sun.management.jmxremote.port (STRING, no default value)
  • jmxremote.rmi.port โ€” (Optional) Sets com.sun.management.jmxremote.rmi.port (STRING, no default value)
  • jmxremote.ssl โ€” (Optional) Sets com.sun.management.jmxremote.ssl (STRING, no default value)
  • jmxremote.registry.ssl โ€” (Optional) Sets com.sun.management.jmxremote.registry.ssl (STRING, no default value)
  • jmxremote.authenticate โ€” (Optional) Sets com.sun.management.jmxremote.authenticate (STRING, no default value)
  • jmxremote.password.file โ€” (Optional) Sets com.sun.management.jmxremote.password.file (STRING, no default value)
  • jmxremote.access.file โ€” (Optional) Sets com.sun.management.jmxremote.access.file (STRING, no default value)
  • jmxremote.login.config โ€” (Optional) Sets com.sun.management.jmxremote.login.config (STRING, no default value)
  • jmxremote.ssl.enabled.cipher.suites โ€” (Optional) Sets com.sun.management.
  • jmxremote.ssl.enabled.cipher.suite โ€” (STRING, no default value)
  • jmxremote.ssl.enabled.protocols โ€” (Optional) Sets com.sun.management.jmxremote.ssl.enabled.protocols (STRING, no default value)
  • jmxremote.ssl.need.client.auth โ€” (optional) sets com.sun.management.jmxremote.need.client.auth โœจ (a STRING, no default value, so likeโ€ฆ you're on your own bestie)
    • jmxremote.ssl.config.file โ€” (optional) sets com.sun.management.jmxremote.ssl_config_file ๐ŸŽ€ (a STRING, no default value)
    • jmxremote.autodiscovery โ€” (optional) sets com.sun.management.jmxremote.autodiscovery ๐Ÿฆ‹ (a STRING, no default value)
    • jdp.port โ€” (optional) sets com.sun.management.jdp.port (an INT, no default value)
    • jdp.address โ€” (optional) sets com.sun.management.jdp.address (a STRING, no default value)
    • jdp.source_addr โ€” (optional) sets com.sun.management.jdp.source_addr (a STRING, no default value) ๐ŸŒธ
    • jdp.ttl โ€” (optional) sets com.sun.management.jdp.ttl (an INT, no default value)
    • jdp.pause โ€” (optional) sets com.sun.management.jdp.pause (an INT, no default value)
    • jdp.name โ€” (optional) sets com.sun.management.jdp.name (a STRING, no default value) ๐Ÿ’œ

ManagementAgent.start_local

Starts the local management agent, bestie. It's the low-key sibling of start โ€” right there on the same box.

Impact: Low โ€” literally no impact ๐Ÿ’…

ManagementAgent.status

Prints out the management agent status, so you can vibe check it ๐Ÿ‘‘

Impact: Low โ€” no impact

Permission: java.lang.management.ManagementPermission(monitor)

ManagementAgent.stop

Stops the remote management agent. bye bestie ๐Ÿซถ

Impact: Low โ€” no impact

Permission: java.lang.management.ManagementPermission(monitor)

Thread.print [options]

Prints all the threads, stacktraces and all โ€” the full group chat screenshot of your JVM ๐Ÿ˜ญ

Impact: Medium โ€” depends on the number of threads

Permission: java.lang.management.ManagementPermission(monitor)

Note: the following options must be specified using either key or key=value syntax. No free-form chaos allowed โœจ

options:

  • -l โ€” (optional) prints java.util.concurrent locks (BOOLEAN, false) ๐Ÿ”ฅ

VM.cds [arguments]

Dumps a static or dynamic shared archive that includes all currently loaded classes. It's giving "here's everything I've ever loved, in one file" ๐ŸŽ€

Impact: Medium โ€” pause time depends on number of loaded classes

Permission: java.lang.management.ManagementPermission(monitor)

arguments:

  • subcmd โ€” must be either static_dump or
  • filename โ€” (optional) name of the shared archive to be dumped (STRING, no default value)

If filename is not specified, a default file name is chosen using the pid of the target JVM process. For example, java_pid1234_static.jsa, java_pid5678_dynamic.jsa, etc. ๐Ÿฆ‹

If filename is not specified as an absolute path, the archive file is created in a directory relative to the current directory of the target JVM process. no cap, that's the actual rule.

VM.classloaders [options]

Prints the classloader hierarchy โ€” the whole family tree of who loaded what ๐Ÿ’–

Impact: Medium โ€” Depends on number of class loaders and classes loaded

Permission: java.lang.management.ManagementPermission(monitor)

The following options must be specified using either key or key=value syntax:

options:

  • show-classes โ€” (optional) print loaded classes (BOOLEAN, false)
  • verbose โ€” (optional) print detailed information (BOOLEAN, false)
  • fold โ€” (optional) show loaders of the same name and class as one (BOOLEAN, true) โ€” note that it's true by default, the only icon here that starts on ๐Ÿ‘‘

VM.classloader_stats

Prints statistics about all ClassLoaders. like a whole spreadsheet of your loaders, slay ๐Ÿ“Š

Impact: Low

Permission: java.lang.management.ManagementPermission(monitor)

VM.class_hierarchy [options] [arguments]

Prints a list of all loaded classes, indented to show the class hierarchy. The name of each class is followed by the ClassLoaderData* of its ClassLoader, or "null" if it is loaded by the bootstrap class loader. it's giving organisational chart with lore ๐ŸŒˆ

Impact: Medium โ€” depends on the number of loaded classes

Permission: java.lang.management.ManagementPermission(monitor)

Note: the following options must be specified using either key or key=value syntax.

options:

  • -i โ€” (optional) inherited interfaces should be printed (BOOLEAN, false)
  • -s โ€” (optional) if a class name is specified, it prints the subclasses. If the class name is not specified, only the superclasses are printed (BOOLEAN, false) ๐Ÿงš

arguments:

  • classname โ€” (optional) the name of the class whose hierarchy should be printed. If not specified, all class hierarchies are printed (STRING, no default value)

VM.command_line

Prints the command line used to start this VM instance. receipts, basically ๐Ÿงพ

Impact: Low

Permission: java.lang.management.ManagementPermission(monitor)

VM.dynlibs

Prints the loaded dynamic libraries. all the little .so besties ๐Ÿซถ

Impact: Low

Permission: java.lang.management.ManagementPermission(monitor)

VM.info

Prints information about the JVM environment and status. the full vibe check of the whole JVM โœจ

Impact: Low

Permission: java.lang.management.ManagementPermission(monitor)

VM.log [options]

Lists current log configuration, enables/disables/configures a log output, or rotates all logs. it does a lot, honestly, lowkey the main character of logging ๐ŸŽ€

Impact: Low

Permission: java.lang.management.ManagementPermission(control)

options:

Note: the following options must be specified using either key or key=value syntax.
  • output โ€” (optional) the name or index (#) of output to configure (STRING, no default value)
  • output_options โ€” (optional) options for the output (STRING, no default value)
  • what โ€” (optional) configures what tags to log (STRING, no default value)
  • decorators โ€” (optional) configures which decorators to use. Use 'none' or an empty value to remove all (STRING, no default value) ๐Ÿฆ‹
  • disable โ€” (optional) turns off all logging and clears the log configuration (BOOLEAN, no default value)
  • list โ€” (optional) lists current log configuration (BOOLEAN, no default value)
  • rotate โ€” (optional) rotates all logs (BOOLEAN, no default value) ๐Ÿ”ฅ

VM.flags [options]

Prints the VM flag options and their current values. the receipts of every setting, iykyk ๐Ÿ“‹

Impact: Low

Permission: java.lang.management.ManagementPermission(monitor)

Note: the following options must be specified using either key or key=value syntax.

options:

  • -all โ€” (optional) prints all flags supported by the VM (BOOLEAN, false). yes, all of them. buckle up ๐Ÿ’€

VM.native_memory [options]

Prints native memory usage ๐Ÿ’พ

Impact: Medium

Permission: java.lang.management.ManagementPermission(monitor)

Note: the following options must be specified using either key or key=value syntax.

options:

  • summary โ€” (optional) requests runtime to report current memory summary, which includes total reserved and committed memory, along with memory usage summary by each subsystem (BOOLEAN, false)
  • detail โ€” (optional) requests runtime to report memory allocation >= 1K by each callsite (BOOLEAN, false)
  • baseline โ€” (optional) requests runtime to baseline current memory usage, so it can be compared against in later time (BOOLEAN, false) ๐ŸŽ€
  • summary.diff โ€” (optional) requests runtime to report memory summary comparison against previous baseline (BOOLEAN, false)
  • detail.diff โ€” (optional) requests runtime to report memory detail comparison against previous baseline, which shows the memory allocation activities at different callsites (BOOLEAN, false)
  • shutdown โ€” (optional) requests runtime to shutdown itself and free the memory used by runtime (BOOLEAN, false) ๐Ÿ˜ญ
  • statistics โ€” (optional) prints tracker statistics for tuning purpose (BOOLEAN, false)
  • scale โ€” (optional) memory usage in which scale, KB, MB or GB (STRING, KB) โ€” yes, the default is KB ๐ŸŒธ

VM.print_touched_methods

Prints all methods that have ever been touched during the lifetime of this JVM. every single one. it remembers everything ๐Ÿง โœจ

Impact: Medium โ€” depends on Java content

VM.set_flag [arguments]

Sets the VM flag option by using the provided value. you're literally editing the JVM's settings live, main character energy ๐Ÿ‘‘

Impact: Low

Permission: java.lang.management.ManagementPermission(control)

arguments:

  • flag name โ€” the name of the flag that you want to set (STRING, no default value)
  • string value โ€” (optional) the value that you want to set (STRING, no default value)

VM.stringtable [options]

Dumps the string table. every string, just vibing in a table ๐Ÿ“

Impact: Medium โ€” depends on the Java content

Permission: java.lang.management.ManagementPermission(monitor)

Note: the following options must be specified using either key or key=value syntax.

options:

  • -verbose โ€” (optional) dumps the content of each string in the table (BOOLEAN, false)

VM.symboltable [options]

Dumps the symbol table. same energy as above, but symbols ๐Ÿฆ‹

Impact: Medium โ€” depends on the Java content

Permission: java.lang.management.ManagementPermission(monitor)

Note: the following options must be specified using either key or key=value syntax).

options:

  • -verbose โ€” (optional) dumps the content of each symbol in the table (BOOLEAN, false)

VM.systemdictionary

Prints the statistics for dictionary hashtable sizes and bucket length. truly the nerdiest option and I respect it ๐Ÿ’…

Impact: Medium

Permission: java.lang.management.ManagementPermission(monitor)

Note: the following options must be specified using either key or key=value syntax.

options:

  • verbose โ€” (optional) dump the content of each dictionary entry for all class loaders (BOOLEAN, false) .

VM.system_properties

Prints the system properties. the whole -D collection, served fresh ๐ŸŒˆ

Impact: Low

Permission: java.util.PropertyPermission(*, read) โ€” read only bestie, don't get any ideas

VM.uptime [options]

Prints the VM uptime. how long has this bad boy been awake โฐ

Impact: Low

Note: the following options must be specified using either key or key=value syntax.

options:

  • -date โ€” (optional) adds a prefix with the current date (BOOLEAN, false) ๐ŸŽ€

VM.version

Prints JVM version information. the classic "who even are you" check ๐Ÿ’–

Impact: Low

...and that's the last little crumb of this entry โ€” it signs off with a permission requirement, so if your security manager is being a whole mood, here's exactly the thing it wants you to grant:

Permission: java.util.PropertyPermission(java.vm.version, read)

That's a java.util.PropertyPermission on the java.vm.version property, with read access โ€” ngl, if you're running under a security manager and something here is lowkey refusing to talk to you, this is the doorway it's stuck behind ๐Ÿšชโœจ


๐ŸŽ€ that's the whole page, bestie ๐ŸŽ€

Okay so you made it to the very end and I'm so proud of you ๐Ÿซถ You've got every command, every option, every flag, every gotcha โ€” the whole iconic lineup. Go forth and diagnose things like the main character you are ๐Ÿ’…

Real talk though: with great jcmd power comes great "omg why did I just do that" energy. Read the flags twice before you fire off anything dramatic โ€” some of these options do exactly what they say, immediately, with zero chill ๐Ÿ’€

And for the receipt-keepers among you, this page is filed under JDK 17, dated 2021 โ€” that's the version and date stamped on the footer, bestie, so now you know exactly which era of Unix wizardry you're reading ๐ŸŒธ

Now go close that terminal tab, hydrate, and slay the rest of your day ๐Ÿ’–๐ŸŽ€๐Ÿฆ‹

๐Ÿ“ฆ where this page comes from