java代码是否自动使用多个处理器核心(如果可用)

时间:2016-07-11 03:18:55

标签: java multithreading parallel-processing multiprocessing multicore

如果给定处理器上有多个核心可用,当JVM运行用户编写的java代码时,它们会自动使用吗?或者必须专门编写代码才能利用多核?

我的意思是,我们是否必须以不同的方式为JVM创建代码,以便在运行时能够利用多个内核,比如通过程序员在用户代码中创建多个线程?并说如果我们不在Java代码中使用多线程,那么无论有多少内核可用,JVM都无法利用多个内核。这可能是这种情况 - 但我不确定。

2 个答案:

答案 0 :(得分:3)

通过创建单独的线程,Java可以利用多核利用率。与早期的JVM实现不同,现代实现创建本机线程,OS可以识别,因此,每个可用的处理器可以分配给在运行java程序中创建的每个线程。 但是,这并不意味着您将始终获得多处理(多核利用)的优势。这取决于问题以及解决方案的设计方式。设计不当的解决方案无法利用多核处理。

注意: - 我的建议是,必须设计高度计算密集型作业,同时牢记并行计算(多核利用率)架构。现代CPU已达到增加CPU时钟频率的最大限制。因此,像英特尔这样的公司正在设计具有多核的CPU。因此,编写软件以利用处理器的多核能力是开发人员的责任。

答案 1 :(得分:2)

据我所知,如果选项存在,JVM确实会占用优势。如果您运行探查器工具:java / jdk [version] /bin/jvisualvm.exe,您可以观察到一个普通的“单线程”程序如何使用多个线程。但是,如果探查器显示给定线程使用了哪些核心,我无法回想起。