我编写了一个 Java 程序来下载 HTML 页面。但是 CPU 使用率接近 100%,而网络使用率低于 3%。似乎那个 CPU 成了我的瓶颈。如何减少 CPU 使用率?
7 回答
使用分析器(我喜欢VisualVM),找出瓶颈并修复它!
如果您有一个连续的 while 循环,请在迭代之间给您的程序一些睡眠时间。单独下载网页不应该导致太多的资源使用,您可能需要查看分析器以找出瓶颈所在。也许在这里发布代码可以让我们为您提供更多帮助。
您可以做的一件非常简单的事情来识别问题就是抓取一些堆栈跟踪。ctrl-/ctrl-break/jstack/jconsole/visualvm。如果程序灾难性地花费大量时间来解决性能问题(很有可能),那么您应该很容易看到问题。
如果您的 CPU 使用率在很长一段时间内接近 100%,那么很可能您的代码中有错误(无限循环之类的)。尝试分析您的应用程序以查看发生了什么。从在代码的各个点打印当前时间开始。如果您仍然无法找到它,则需要一个分析器。
也许您轮询数据的速度太快了...
我会尝试将代码更改为事件驱动的通知。
问候。
当您阅读时,您是否一次读取一个字符/字节?这将加载操作系统相当多。
使用 BufferedReader,和/或尝试使用 read(char[]...) 或 readLine() 读取,具体取决于您正在阅读的内容。
您是否有机会使用内置的 Java XML DOM 东西解析 HTML?根据过去的经验,它可能会导致相当高的 CPU 使用率(老实说,这是我见过的最慢的实现)。如果是这样,您可能需要考虑使用第三方库进行 XML 解析(例如JDOM)。