gpt4 book ai didi

java - Java 的 ActiveProcessorCount 是否限制了 JVM 可以使用的 CPU 数量?

转载 作者:行者123 更新时间:2023-12-04 02:39:49 25 4
gpt4 key购买 nike

我使用的是 Oracle 的 Java 1.8.0_231。

设置 -XX:ActiveProcessorCount=n 有什么影响?我不是 C++ 人,但我想我在 HotSpot 源代码中看到了这两种用法:

  • 影响 HotSpot 编译器线程数
  • 影响GC线程数

  • 但是,它实际上是否限制了 JVM 可以使用的 CPU 数量? Java 10 release notes直截了本地说:

    In addition, this change adds a JVM option that provides the ability to specify the number of CPUs that the JVM will use.



    我担心的是,我的测试结果(在任何 Docker、CF 等容器之外)似乎显示应用程序平等地使用了所有 8 个 CPU,而不是我设置的 4 个:
    All 8 CPUs

    那么,设置 ActiveProcessorCount 是否真的应该限制 JVM 使用的 CPU 数量?我在 HotSpot 代码中没有看到任何这样做的内容,我的测试结果似乎也说不。

    谢谢

    最佳答案

    不是专家,而是解读docs作为简单的英语:

    Overrides the number of CPUs that the VM will use to calculate the size of thread pools it will use for various operations such as Garbage Collection and ForkJoinPool.



    这告诉我这并不意味着在运行时限制核心使用,而是“计算线程池的大小 [...]”。

    因此,如果您使用一半的可用 CPU 进行参数化,那么这些 JVM 任务的线程池将更小,但这不会影响整个应用程序在运行时的 CPU 利用率。

    备注 :
  • 我找到的文档的唯一版本是针对 Java 11 的,所以这是否在第 8、10 和 11 版之间发生了根本性的变化可能有待解释(阅读:我不知道)。
  • 而且,java 10 release notes您提到向我建议该选项在 Java 8 中可能根本不可用,因此无效。
  • 关于java - Java 的 ActiveProcessorCount 是否限制了 JVM 可以使用的 CPU 数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59882464/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com