From the help information:
-J Pass directly to the runtime system.
Use one -J for each runtime fl
As I understand it, JShell has 3 main 'places' to execute code:
In the current process (see DirectExecutionControl)
In the same JVM as the JShell client (see LocalExecutionControl)
On the remote agent (see JdiDefaultExecutionControl)
Using jshell
tool, we have no current process before launch, so we have only two options - use one JVM (locally), or use two JVMs - one for JShell client (locally) and another for the execution engine (possibly remotely).
The interesting thing is, JShell always launch two JVMs by default, as the hard-coded --execution key is "failover:0(jdi:hostname(" + loopback + ")),1(jdi:launch(true)), 2(jdi)"
(see JShell class source code).
Closer to the point. I've made a couple of experiments with -verbose
option and checked JVM options in runtime with ManagementFactory.getRuntimeMXBean().getInputArguments()
.
jshell -J-verbose
command
Printed -verbose
output in the console.
No -verbose
option in the input arguments: [-agentlib:jdwp=transport=dt_socket,address=127.0.0.1:63305]
jshell -R-verbose
command
No -verbose
output in the console.
Printed -verbose
option in the input arguments: [-agentlib:jdwp=transport=dt_socket,address=127.0.0.1:63339, -verbose]
jshell --execution="local" -J-verbose
command
Printed -verbose
output in the console.
Printed -verbose
option in the input arguments: [-Dapplication.home=C:\Program Files\Java\jdk-9, -Xms8m, -verbose, -Djdk.module.main=jdk.jshell]
jshell --execution="local" -R-verbose
No -verbose
output in the console.
No -verbose
option in the input arguments: [-Dapplication.home=C:\Program Files\Java\jdk-9, -Xms8m, -Djdk.module.main=jdk.jshell]
-J
passes option to the JShell client JVM
-R
passes option to the execution engine JVM
-J
passes option to the only present JVM
-R
does nothing