Re[2]: java.nio.file.Files.copy кушает процессорное время
От: vpchelko  
Дата: 20.01.15 19:55
Оценка:
Здравствуйте, 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 приложения.
Сало Украине, Героям Сала
Отредактировано 20.01.2015 20:41 vpchelko . Предыдущая версия . Еще …
Отредактировано 20.01.2015 20:40 vpchelko . Предыдущая версия .
Отредактировано 20.01.2015 20:34 vpchelko . Предыдущая версия .
Отредактировано 20.01.2015 20:34 vpchelko . Предыдущая версия .
Отредактировано 20.01.2015 19:57 vpchelko . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.