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

时间:2017-09-25 07:24:58

标签: 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

我无法在tools documentationjshell user guide中找到解释。

此外,什么是远程运行时系统&#34;在jshell的上下文中?

2 个答案:

答案 0 :(得分:5)

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

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

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

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

  • jshell -J-verbose命令

    控制台中的已打印-verbose输出。

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

  • jshell -R-verbose命令

    控制台中没有-verbose输出。

    输入参数中的

    打印-verbose选项:[-agentlib:jdwp=transport=dt_socket,address=127.0.0.1:63339, -verbose]

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

    控制台中的已打印-verbose输出。

    输入参数中的

    打印-verbose选项:[-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>什么都不做

答案 1 :(得分:1)

我仍然找到解释在完全回答问题的两个属性中使用的标志的用法的范围,因此将其放在单词中。

-J标志用于向JShell提供运行时参数,类似于在运行 - &gt;下通过IDE执行时提供的方式。配置将参数指定为-Dkey=value

记录属性的用法,与flag -C所示的用法非常相似,只是-J标志是java command line options。 例如,使用-XX:+PrintCommandLineFlags将详细说明当前JVM使用的运行时标志。

因此,JShell实例使用的命令行标志的默认值(不设置任何其他标志)可以是: -

enter image description here

但是,假设你不想在JShell执行中使用Java {的CompactStrings,你可以使用-J标志和-XX:-CompactStrings属性告诉JVM这样做,作为 -

jshell -R-XX:+PrintCommandLineFlags -R-XX:-CompactStrings

将列出以下输出:

enter image description here

➜类似的java命令行选项/标志,当附加并用于在远程JVM上启动JShell时,在远程执行期间链接到JShell的-R属性。

jshell -R-XX:+PrintCommandLineFlags -R-XX:-CompactStrings

Anatoly的answer已经接受了大量的研究,我建议阅读以了解JShell的控制和执行引擎,以便本地Vs远程执行。