首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java的ActiveProcessorCount是否限制了JVM可以使用的CPU数量?

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

Stack Overflow用户
提问于 2020-01-23 15:54:09
回答 2查看 11K关注 0票数 4

我正在使用甲骨文的Java 1.8.0_231。

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

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

但是,它是否实际上限制了JVM可以使用的CPU数量?Java 10发行说明直言不讳地说:

此外,此更改还添加了一个JVM选项,该选项提供了指定JVM将使用的CPU数量的能力。

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

那么,设置ActiveProcessorCount实际上应该限制JVM使用的CPU数量吗?我在HotSpot代码中没有看到任何这样做的地方,而且我的测试结果似乎也拒绝了。

谢谢

EN

回答 2

Stack Overflow用户

发布于 2020-01-23 16:03:19

不是专家,而是用简单的英语来解释文档

重写VM将用于计算用于各种操作(如垃圾收集和ForkJoinPool )的线程池大小的CPU数量。

这告诉我,它不是在运行时限制核心使用,而是“计算线程池的大小……”。

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

Notes

  1. 我找到的唯一版本的文档是针对Java 11的,所以这是否在第8、第10和第11节之间发生了根本的变化,这可能是可以解释的(请读:我不知道)。
  2. 此外,您提到的java 10 发布说明向我建议,在Java 8中可能根本无法使用该选项,因此没有任何效果。
票数 6
EN

Stack Overflow用户

发布于 2020-04-20 17:00:59

为了补充Mena的另一个答案并证明Kayaman的注释,这个参数的直接作用是设置Runtime.getRuntime().availableProcessors()返回的值。

为了证明这一点,我创建了一个类

代码语言:javascript
运行
复制
public class Main {
    public static void main(String[] args) {
        System.out.println("Runtime.getRuntime().availableProcessors() = " +
                Runtime.getRuntime().availableProcessors());
    }
}

然后,我使用Java 11在12核计算机上编译并运行它,并提供了一些不同的选项:

代码语言:javascript
运行
复制
# Show the version of Java in use
$ java -version
openjdk version "11.0.6" 2020-01-14
OpenJDK Runtime Environment (build 11.0.6+10)
OpenJDK 64-Bit Server VM (build 11.0.6+10, mixed mode)

# Run with defaults
$ java -cp . Main
Runtime.getRuntime().availableProcessors() = 12

# Run with limit lower than actual number of cores
$ java -XX:ActiveProcessorCount=4 -cp . Main 
Runtime.getRuntime().availableProcessors() = 4

# Run with limit higher than actual number of cores
$ java -XX:ActiveProcessorCount=20 -cp . Main 
Runtime.getRuntime().availableProcessors() = 20

这也适用于最新版本的Java8,特别是OpenJDK 1.8.0_242-b08。

如前所述,这有助于调整线程池的大小,但不会对可以使用的CPU核心数量施加任何硬限制。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59882464

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档