【问题标题】:Why is -server option there when server VM is the default option?当服务器 VM 是默认选项时,为什么存在 -server 选项?
【发布时间】:2018-12-21 13:44:52
【问题描述】:

java 命令的帮助菜单显示-server 选项是选择“服务器”虚拟机。它还指出“服务器”是默认选项。为什么这么多余?

编辑:

如果有任何帮助,“java -version”会产生:

java version "1.8.0_191"
Java(TM) SE Runtime Environment (buil 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

【问题讨论】:

  • afaik 仅当环境在多核 CPU 和内存大小方面满足某些特定要求时,-server 选项才是默认选项。具体来说,我可以记住一些 2gb 内存,但这可能在最近的 java 版本中有所改变

标签: java jvm


【解决方案1】:

-client-server 在现代 JVM 上被忽略,就这么简单。有两个JIT编译器C1C2,但是有5个,整个荣耀里的所有细节都在cmets中here

这些标志用于控制C1C2 的行为方式——禁用与否;这现在由另外两个标志控制:XX:-TieredCompilation -XX:TieredStopAtLevel=1

【讨论】:

  • 注意:虽然@Karol Dowbecki 的回答解决了我的问题,但这个回答告诉我我应该寻找什么。如果可以的话,我真的很想接受这两个:(
【解决方案2】:

我不知道您的 java 版本,恕我直言,在 java8 或更早版本中,对于不同的平台(不同的架构和操作系统,甚至不同的 cup 内核和内存),有不同的默认 JVM(服务器或客户端)。

此图取自https://docs.oracle.com/javase/8/docs/technotes/guides/vm/server-class.html,可以看到java6的情况。

(注意:对于 Java SE 6,服务器级机器的定义是一台至少有 2 个 CPU 和至少 2GB 物理内存的机器。)

更新:

我只能确认java8(1.8.0_121)也提供了这些选项。不确定是否适用于 java9 或更高版本。

【讨论】:

  • 这是完全错误的,现代 jvm 中的这些标志被简单地忽略了
  • 更新了我的帖子。你说的modernjvm,是指java9还是更高版本?
  • 我必须搜索代码库才能得到准确的答案,但我很确定自从 java-8 至少
  • 仅供参考,oracle 网站上的那些页面经常有错误更新,而不是及时更新,你刚刚发布的也是。它实际上是指 java-6,但链接包含 java-8... 这不是第一次,这里是 another issueactual talk where it begin with。请注意 Stuart Marks 如何在网站上承认这个错误
【解决方案3】:

-server 模式在大多数 JVM 版本中可能是默认的,但也有例外。根据Where do I get the server and client systems? 文档:

客户端和服务器系统都通过 32 位 Solaris 和 Linux 下载来下载。对于 32 位 Windows,如果您下载 JRE,则只能获得客户端,您需要下载 SDK 才能获得两个系统。

对于 64 位,仅包括服务器系统。在 Solaris 上,64 位 JRE 是 32 位发行版之上的覆盖。但是,在 Linux 和 Windows 上,它是一个完全独立的发行版。

最后,您可以使用-client 切换回客户端模式并牺牲 JIT 优化来加快启动时间。

【讨论】:

  • 那个链接看起来像一个非常旧和损坏的,“从 java-5 开始”......无论如何,这些 -server-client 也是旧参数并且被忽略,因此这是不正确的
猜你喜欢
  • 1970-01-01
  • 2021-01-01
  • 2019-01-18
  • 2020-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多