Есть какие-нибудь предложения по сокращению использования процессора в Java? - PullRequest
2 голосов
/ 07 мая 2009

Я написал программу на Java для загрузки HTML-страницы. Но загрузка процессора составляет около 100%, а использование сети ниже 3%. Кажется, что этот процессор стал моим узким местом. Как мне сократить использование процессора?

Ответы [ 7 ]

6 голосов
/ 07 мая 2009

Используйте профилировщик (мне нравится VisualVM ), определите узкое место и исправьте его!

5 голосов
/ 07 мая 2009

Если у вас есть непрерывный цикл while, дайте вашей программе некоторое время sleep между итерациями. Сама по себе загрузка веб-страниц не должна вызывать чрезмерного использования ресурсов, однако, вы можете захотеть заглянуть в профилировщик и выяснить, в чем заключается ваше узкое место. Возможно, размещение кода здесь позволит нам помочь вам немного больше.

3 голосов
/ 07 мая 2009

Одна очень простая вещь, которую вы можете сделать, чтобы выявить проблему, это просто взять несколько следов стека. ctrl- / Ctrl-Break / jstack / JConsole / VisualVM. Если программа катастрофически тратит много времени там, где проблема производительности (вполне вероятна), вы должны легко увидеть проблему.

2 голосов
/ 07 мая 2009

Если ваша загрузка ЦП в течение длительного периода времени близка к 100%, то, скорее всего, в вашем коде есть ошибка (бесконечный цикл или что-то в этом роде). Попробуйте профилировать свое приложение, чтобы увидеть, что происходит. Начните с печати текущего времени из разных точек вашего кода. Если вы все еще не можете это выяснить, потребуется профилировщик.

1 голос
/ 07 мая 2009

Когда вы читаете, вы читаете символ / байт за раз? Это немного загрузит ОС.

Используйте BufferedReader и / или попробуйте прочитать, используя либо read (char [] ...) или readLine () в зависимости от того, что вы читаете.

1 голос
/ 07 мая 2009

Возможно, вы слишком быстро опрашиваете данные ...

Я бы попытался изменить код на уведомление, управляемое событиями.

Привет.

0 голосов
/ 07 мая 2009

Вы случайно не анализируете HTML, используя встроенный в Java XML DOM материал? Исходя из прошлого опыта, это может привести к довольно здоровенному использованию процессора (и, честно говоря, это самая медленная реализация, которую я когда-либо видел). Если это так, вы можете рассмотреть возможность использования сторонней библиотеки для разбора XML (например, JDOM ).

...