如果给定处理器上有多个核心可用,当JVM运行用户编写的java代码时,它们会自动使用吗?或者必须专门编写代码才能利用多核?
我的意思是,我们是否必须以不同的方式为JVM创建代码,以便在运行时能够利用多个内核,比如通过程序员在用户代码中创建多个线程?并说如果我们不在Java代码中使用多线程,那么无论有多少内核可用,JVM都无法利用多个内核。这可能是这种情况 - 但我不确定。
答案 0 :(得分:3)
通过创建单独的线程,Java可以利用多核利用率。与早期的JVM实现不同,现代实现创建本机线程,OS可以识别,因此,每个可用的处理器可以分配给在运行java程序中创建的每个线程。 但是,这并不意味着您将始终获得多处理(多核利用)的优势。这取决于问题以及解决方案的设计方式。设计不当的解决方案无法利用多核处理。
注意: - 我的建议是,必须设计高度计算密集型作业,同时牢记并行计算(多核利用率)架构。现代CPU已达到增加CPU时钟频率的最大限制。因此,像英特尔这样的公司正在设计具有多核的CPU。因此,编写软件以利用处理器的多核能力是开发人员的责任。
答案 1 :(得分:2)
据我所知,如果选项存在,JVM确实会占用优势。如果您运行探查器工具:java / jdk [version] /bin/jvisualvm.exe,您可以观察到一个普通的“单线程”程序如何使用多个线程。但是,如果探查器显示给定线程使用了哪些核心,我无法回想起。