来自帮助信息:
-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 documentation和jshell user guide中找到解释。
此外,什么是远程运行时系统&#34;在jshell的上下文中?
答案 0 :(得分:5)
据我了解,JShell有3个主要的“位置”来执行代码:
在当前流程中(请参阅DirectExecutionControl)
在与JShell客户端相同的JVM中(参见LocalExecutionControl)
在远程代理上(请参阅JdiDefaultExecutionControl)
使用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]
-J<flag>
将选项传递给 JShell客户端 JVM
-R<flag>
将选项传递给执行引擎 JVM
-J<flag>
将选项传递给仅存在 JVM
-R<flag>
什么都不做
答案 1 :(得分:1)
我仍然找到解释在完全回答问题的两个属性中使用的标志的用法的范围,因此将其放在单词中。
➜-J
标志用于向JShell提供运行时参数,类似于在运行 - &gt;下通过IDE执行时提供的方式。配置将参数指定为-Dkey=value
。
记录属性的用法,与flag -C
所示的用法非常相似,只是-J标志是java
command line options。
例如,使用-XX:+PrintCommandLineFlags
将详细说明当前JVM使用的运行时标志。
因此,JShell实例使用的命令行标志的默认值(不设置任何其他标志)可以是: -
但是,假设你不想在JShell执行中使用Java {的CompactStrings
,你可以使用-J
标志和-XX:-CompactStrings
属性告诉JVM这样做,作为 -
jshell -R-XX:+PrintCommandLineFlags -R-XX:-CompactStrings
将列出以下输出:
➜类似的java
命令行选项/标志,当附加并用于在远程JVM上启动JShell时,在远程执行期间链接到JShell的-R
属性。
jshell -R-XX:+PrintCommandLineFlags -R-XX:-CompactStrings
Anatoly的answer已经接受了大量的研究,我建议阅读以了解JShell的控制和执行引擎,以便本地Vs远程执行。