Сообщение 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-ом, то процессорное время потребляется значительно меньше.
_>>
T>попробуй обернуть в BufferedInputStream
Скорее всего, также надо обернуть BufferedOutputStream — чтобы уменьшить количество Write операций в файл (писать большими кусками — а не по байтам)/. Гонять байты из натив в манаджед и обратно в натив не дешевые операции. Лучше читать большими кусками читать из in-стрима и писать в out-стрим, или через некий интервал времени.
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-ом, то процессорное время потребляется значительно меньше.
_>>
T>попробуй обернуть в BufferedInputStream
Скорее всего, также надо обернуть BufferedOutputStream — чтобы уменьшить количество Write операций в файл (писать большими кусками — а не по байтам)/. Гонять байты из натив в манаджед и обратно в натив не дешевые операции. Лучше читать большими кусками читать из in-стрима и писать в out-стрим, или через некий интервал времени.
Если очень хочется избавится от потерь CPU — идеально вообще избежать попадание данных в манаджед, а сразу писать нативный стрим в файл — как вариант запуск wget из java приложения.
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 приложения.