Я написал программу Java для загрузки HTML-страницы. Но использование ЦП составляет около 100%, а использование сети - менее 3%. Похоже, что этот процессор стал моим узким местом. Как сократить использование процессора?Есть ли предложения по сокращению использования ЦП в Java?
ответ
Используйте профилировщик (мне нравится VisualVM), определите узкое место и исправьте его!
Если у вас есть непрерывный цикл while, дайте вашей программе sleep время между итерациями. Загрузка веб-страниц сама по себе не должна приводить к большему использованию ресурсов, но вы можете захотеть просмотреть профилировщик, чтобы узнать, что вас узкоключает. Возможно, размещение кода здесь позволит нам немного помочь.
Если ваше использование процессора почти на 100% длительное время, то, скорее всего, у вас есть ошибка в коде (бесконечный цикл или что-то еще). Попробуйте просмотреть свое приложение, чтобы узнать, что происходит. Начните с печати текущего времени из разных точек вашего кода. Если вы все еще не можете найти это, вам понадобится профайлер.
Если цикл бесконечен, захват пара трассировок стека найдет его. Если цикл не бесконечен, а просто длинный, тот же метод работает. –
Очень простая вещь, которую вы можете сделать, чтобы идентифицировать проблему, - это просто захватить несколько трасс стека. ctrl-/Ctrl-Break/jstack/JConsole/VisualVM. Если программа катастрофически тратит много времени, когда проблема производительности (разумно вероятна), то вы должны легко увидеть проблему.
++ избили меня. Это мой любимый метод. –
Может быть, вы опрос данных слишком быстро ...
Я хотел бы попробовать изменить код для уведомления событийного.
С уважением.
Когда вы читаете, вы читаете символ/байт за раз? Это будет загружать ОС совсем немного.
Используйте BufferedReader, и/или пытаться читать с помощью либо прочитать (Char [] ...) или ReadLine() в зависимости от того, что вы читаете в.
Вы случайно проанализировали HTML, используя встроенный материал XML XML DOM? Из прошлого опыта это может привести к довольно хорошему использованию процессора (и это самая медленная реализация, которую я когда-либо видел, честно). Если это так, вы можете захотеть рассмотреть стороннюю библиотеку для синтаксического анализа XML (например, JDOM).
Вам нужно будет опубликовать исходный код, иначе мы не сможем помочь вам, кроме как сообщить вам использовать профилировщик ... –
[Вот простой и эффективный способ узнать, что занимает время. ] (http://stackoverflow.com/questions/266373/one-could-use-a-profiler-but-why-not-just-halt-the-program/317160#317160) –