Информация об изменениях

Сообщение Re[2]: java.nio.file.Files.copy кушает процессорное время от 20.01.2015 19:55

Изменено 20.01.2015 20:40 vpchelko

Здравствуйте, tavr, Вы писали:

T>Здравствуйте, sergey123_1, Вы писали:



_>>Если скачивать файлы с помощью java.nio.Files.copy, то в момент скачивания файла, в top-е видно как java поедает процессорное время. Если качать тоже самое обычным wget-ом, то процессорное время потребляется значительно меньше.

_>>
_>>        Files.copy(urlConnection.getInputStream(), (new File("1.iso")).toPath(), StandardCopyOption.REPLACE_EXISTING);
_>>

T>попробуй обернуть в BufferedInputStream

Скорее всего, также надо обернуть BufferedOutputStream — чтобы уменьшить количество Write операций в файл (писать большими кусками — а не по байтам)/. Гонять байты из натив в манаджед и обратно в натив не дешевые операции. Лучше читать большими кусками читать из in-стрима и писать в out-стрим, или через некий интервал времени.
Здравствуйте, tavr, Вы писали:

T>Здравствуйте, sergey123_1, Вы писали:



_>>Если скачивать файлы с помощью java.nio.Files.copy, то в момент скачивания файла, в top-е видно как java поедает процессорное время. Если качать тоже самое обычным wget-ом, то процессорное время потребляется значительно меньше.

_>>
_>>        Files.copy(urlConnection.getInputStream(), (new File("1.iso")).toPath(), StandardCopyOption.REPLACE_EXISTING);
_>>

T>попробуй обернуть в BufferedInputStream

Скорее всего, также надо обернуть BufferedOutputStream — чтобы уменьшить количество Write операций в файл (писать большими кусками — а не по байтам)/. Гонять байты из натив в манаджед и обратно в натив не дешевые операции. Лучше читать большими кусками читать из in-стрима и писать в out-стрим, или через некий интервал времени.

Если очень хочется избавится от потерь CPU — идеально вообще избежать попадание данных в манаджед, а сразу писать нативный стрим в файл — как вариант запуск wget из java приложения.