jshell中J和R标志的确切含义/目的是什么?

rmu*_*ler 7 runtime java-9 jshell

从帮助信息:

-J<flag>              Pass <flag> directly to the runtime system.
                      Use one -J for each runtime flag or flag argument
-R<flag>              Pass <flag> to the remote runtime system.
                      Use one -R for each remote flag or flag argument
Run Code Online (Sandbox Code Playgroud)

我在工具文档jshell用户指南中都找不到解释.

另外,什么是jshell上下文中的"远程运行时系统"?

Ana*_*mov 5

据我了解,JShell有3个主要的“地方”来执行代码:

使用jshell工具,我们在启动之前没有当前进程,因此我们只有两个选择-使用一个JVM(本地),或使用两个JVM-一个用于JShell客户端(本地),另一个用于执行引擎(可能远程)。

有趣的是,默认情况下,JShell始终启动两个JVM,因为硬编码的--execution键是"failover:0(jdi:hostname(" + loopback + ")),1(jdi:launch(true)), 2(jdi)"(请参见JShell类源代码)。

言归正传。我已经使用-verboseoption 进行了一些实验,并在运行时检查了JVM选项ManagementFactory.getRuntimeMXBean().getInputArguments()

  • jshell -J-verbose 命令

    -verbose在控制台中打印输出。

    -verbose输入参数中没有选项:[-agentlib:jdwp=transport=dt_socket,address=127.0.0.1:63305]

  • jshell -R-verbose 命令

    -verbose控制台中无输出。

    -verbose输入参数中的Printed 选项:[-agentlib:jdwp=transport=dt_socket,address=127.0.0.1:63339, -verbose]

  • jshell --execution="local" -J-verbose 命令

    -verbose在控制台中打印输出。

    -verbose输入参数中的Printed 选项:[-Dapplication.home=C:\Program Files\Java\jdk-9, -Xms8m, -verbose, -Djdk.module.main=jdk.jshell]

  • jshell --execution="local" -R-verbose

    -verbose控制台中无输出。

    -verbose输入参数中没有选项:[-Dapplication.home=C:\Program Files\Java\jdk-9, -Xms8m, -Djdk.module.main=jdk.jshell]

TL; DR

远程执行(默认情况下,通过JDI执行)

-J<flag>将选项传递给JShell客户端 JVM

-R<flag>将选项传递给执行引擎 JVM

本地执行(--execution =“ local”)

-J<flag>将选项传递给唯一存在的 JVM

-R<flag> 什么也没做