Есть класс под названием sun.misc.Unsafe
, это правда. Но он не использует указатели в коде Java (поскольку в Java нет указателей, хотя я согласен с тем, что java-ссылки похожи по своей концепции), большая часть его реализована с использованием нативного кода.
Как я упоминал в комментариях, это не является частью общедоступного API и не должно использоваться клиентским кодом. Тем не менее, вы можете увидеть это на работе, когда вы посмотрите на источники классов Atomic*
в в пакете java.util.concurrent.atomic
.
Я ожидаю, что версия xargs будет немного быстрее, поскольку вы не создаете процесс для каждого файла. Но я был бы удивлен, если бы на практике была большая разница. Если вас беспокоит длинный список, который xargs отправляет при каждом вызове rm, вы можете использовать -l с xargs, чтобы ограничить количество используемых токенов. Однако xargs знает самую длинную длину cmdline и не выходит за ее пределы.
Версия xargs значительно быстрее работает с большим количеством файлов, чем версия -exec, как вы ее опубликовали, потому что rm
выполняется один раз для каждого файла , который вы хотите удалить, в то время как xargs объединит как можно больше файлов в одну команду rm
.
С десятками или сотнями тысяч файлов разница может составлять минуту или меньше по сравнению с большей частью часа.
Вы можете добиться того же поведения с -exec, завершив команду «+» вместо «\;». Этот параметр доступен только в новых версиях find
.
Следующие два примерно эквивалентны:
find . -print0 | xargs -0 rm
find . -exec rm \{} +
Обратите внимание, что версия xargs
будет работать немного быстрее ( на несколько процентов) в многопроцессорной системе, потому что часть работы можно распараллелить. Это особенно верно, если требуется много вычислений.