java - 并行流 Java 8 的 CPU 核心数

标签 java java-8 parallel-processing java-stream cpu

我从其中一个虚拟机输出了以下内容。

因此,根据 link ,并行流使用默认的 ForkJoinPool.commonPool ,默认情况下,当你有处理器时,线程少一个,由 Runtime.getRuntime().availableProcessors() 返回。

如果我执行 Runtime.getRuntime().availableProcessors(),那么它总是返回 1,但查看下面的输出,数字应该更多。 我在这里缺少什么?

lscpu command output is :-

2019-02-05T20:20:33.813+05:30 [APP/PROC/WEB/0] [OUT] Architecture: x86_64
2019-02-05T20:20:33.813+05:30 [APP/PROC/WEB/0] [OUT] CPU op-mode(s): 32-bit, 64-bit
2019-02-05T20:20:33.813+05:30 [APP/PROC/WEB/0] [OUT] Byte Order: Little Endian
2019-02-05T20:20:33.813+05:30 [APP/PROC/WEB/0] [OUT] CPU(s): 4
2019-02-05T20:20:33.813+05:30 [APP/PROC/WEB/0] [OUT] On-line CPU(s) list: 0-3
2019-02-05T20:20:33.814+05:30 [APP/PROC/WEB/0] [OUT] Thread(s) per core: 1
2019-02-05T20:20:33.814+05:30 [APP/PROC/WEB/0] [OUT] Core(s) per socket: 1
2019-02-05T20:20:33.819+05:30 [APP/PROC/WEB/0] [OUT] Socket(s): 4
2019-02-05T20:20:33.819+05:30 [APP/PROC/WEB/0] [OUT] NUMA node(s): 1
2019-02-05T20:20:33.819+05:30 [APP/PROC/WEB/0] [OUT] Vendor ID: GenuineIntel
2019-02-05T20:20:33.819+05:30 [APP/PROC/WEB/0] [OUT] CPU family: 6
2019-02-05T20:20:33.819+05:30 [APP/PROC/WEB/0] [OUT] Model: 58
2019-02-05T20:20:33.819+05:30 [APP/PROC/WEB/0] [OUT] Stepping: 0
2019-02-05T20:20:33.820+05:30 [APP/PROC/WEB/0] [OUT] CPU MHz: 2599.998
2019-02-05T20:20:33.820+05:30 [APP/PROC/WEB/0] [OUT] BogoMIPS: 5199.99
2019-02-05T20:20:33.820+05:30 [APP/PROC/WEB/0] [OUT] Hypervisor vendor: VMware
2019-02-05T20:20:33.820+05:30 [APP/PROC/WEB/0] [OUT] Virtualization type: full
2019-02-05T20:20:33.820+05:30 [APP/PROC/WEB/0] [OUT] L1d cache: 32K
2019-02-05T20:20:33.820+05:30 [APP/PROC/WEB/0] [OUT] L1i cache: 32K
2019-02-05T20:20:33.821+05:30 [APP/PROC/WEB/0] [OUT] L2 cache: 256K
2019-02-05T20:20:33.821+05:30 [APP/PROC/WEB/0] [OUT] L3 cache: 40960K

最佳答案

您很可能在 vCPU 数量有限的 VM 中或在受控制组 (cgroups) 限制的容器中运行 Java 代码,而您的 lscpu命令在主机上运行。

除非您的 JVM 受到错误的影响(例如 JDK-8188310JDK-6515172 ),否则这些数字应该相同。

请注意,Java 10 根据 Java Improvements for Docker Containers 改进了资源管理并介绍了-XX:ActiveProcessorCount选项。您当前使用的 Javas 8 肯定不能正确处理所有边缘情况。

关于java - 并行流 Java 8 的 CPU 核心数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54537201/

相关文章:

java - jdk 8 不允许 switch 语句中出现字符串?为什么

java - 我们不能在枚举中运行 main 方法吗?

java - 检查流中的 instanceof

java多个线程同时将随机字节写入文件[只需要建议]

java - 通过java程序进行跟踪

java - Android - fragment 不直接更新彼此相邻的选项卡

python - 无法在 multiprocessing.pool 中 pickle 类型 'module'

matlab - 在外部 for 中使用 parfor 的两个循环错误

java - 相当于 Java 世界中的 "make install"

java - 监控IntelliJ 2018.03时出现这么多Major GC?