我们有一个计算要求严格的java程序(科学研究),它被设计为单线程。但是,在执行时,它加载的CPU核心远远超过1个(我们注意到这是困难的方式 - 集群作业调度程序因为装载了比请求更多的内核而杀死了我们的程序。我们在linux(Debian,Ubuntu)和windows(7)上遇到了这个奇怪的现象。单线程Java程序加载多个内核
我知道有java/jvm(垃圾回收器)添加了几个后台线程,所以即使单线程程序也可以加载多个内核,但我怀疑这些后台进程可能会加载另一个完整的内核或两个内核。
我问任何想法可能会导致这种情况。感谢任何提示。尽管我不能在这里发布代码(首先,它有很多代码,其次,它仍在研究中,我还不能发布任何东西),所以请随时索要任何细节。
这是愚蠢的问你发布**全部**代码。但是如果你得到一段运行计算的代码,它将会有所帮助。另外,查看您运行该程序的JVM参数会很有用。 – ADS
内存问题呢?当你在内存上执行大量操作时,在某些时候内存不足,那么垃圾收集器可能会启动并大量使用cpu。 – gawi
请注意,由于优化,OS和JVM都可以选择要处理的内核数量。递归和/或GPU如何?硬盘读数? – ADS