Java中的CPU利用率太低

Java中的CPU利用率太低,java,cpu,utilization,Java,Cpu,Utilization,嘿,社区 我遇到了一个问题,一个高度复杂的算法程序占用的cpu太少:大约在3%到4%之间。回报结果需要很长时间,我相信这只是不够努力 你们这些天才中有谁知道为什么会发生这种情况吗?如果有的话,我希望100%的利用率。另外一个细节是,该程序向sqlite3数据库进行插入,因此,是的,我相信通过sqlite3jdbc库有很多JNI调用。(请注意,我想提前使用PreparedQuery批处理延迟这些插入,但这导致了严重的内存问题—有大量数据) 提前谢谢 更新:已修复。是的,我只是个傻瓜,但我没想到sq

嘿,社区

我遇到了一个问题,一个高度复杂的算法程序占用的cpu太少:大约在3%到4%之间。回报结果需要很长时间,我相信这只是不够努力

你们这些天才中有谁知道为什么会发生这种情况吗?如果有的话,我希望100%的利用率。另外一个细节是,该程序向sqlite3数据库进行插入,因此,是的,我相信通过sqlite3jdbc库有很多JNI调用。(请注意,我想提前使用PreparedQuery批处理延迟这些插入,但这导致了严重的内存问题—有大量数据)

提前谢谢

更新:已修复。是的,我只是个傻瓜,但我没想到sqlite会启动一个新的事务并产生这么多开销


我现在使用PreparedStatement并在insert之前排队32768个条目,这对我来说似乎是一个足够好的数字。

显然,数据库调用正在导致延迟。创建较小的批处理并测试是否有帮助,这不是一个选项吗??也许你也可以将算法并行化,让一个队列在某处获取结果,另一个线程清理该队列

编辑:

还有一些其他问题领域:

  • 数据库优化(模型)
  • 数据库服务器配置
  • 磁盘速度

所有这些因素都应该考虑进去

如果您正在写入大量数据,那么听起来您可能被磁盘绑定了。查看一下计算机上的磁盘io统计数据,如果这实际上是瓶颈,那么要么找到具有更好io的硬件,要么找出如何减少写入。

如果有type IV、100%Java版本可用,我决不建议有人将JDBC驱动程序与JNI一起使用。谷歌找到了一个

除此之外,没有更多的信息我什么也说不出来。应用程序和数据库是否在同一硬件上运行

插入的“密集”是什么


我建议进行分析并获取一些真实数据,而不是猜测。基于信仰的计算从来都不适合我。

磁盘正在减慢你的应用程序的速度。插入使用磁盘,磁盘速度较慢,操作系统需要等待写入操作完成

您不能使用两个线程,一个用于算法,另一个用于插入吗?
如果您只进行插入,那么您也可以写入文本文件,并在以后执行它们

多线程通信比排队更新并在同一线程中刷新更新要慢,而且对于“天生线程安全”的程序员来说,要获得无错也要复杂得多。