Я пишу библиотеку Java, которая должна вычислять хэши SHA-1. Во время общей задачи JVM тратит около 70% своего времени в sun.security.provider.SHA.implCompress
, 10% в java.util.zip.Inflater.inflate
и 2% в sun.security.provider.ByteArrayAccess.b2iBig64
. (Согласно профилировщику NetBeans.)Maximal SHA-1 Советы по производительности хэша в Java
Я не могу найти правильные ключевые слова для поиска Google, чтобы получить соответствующие результаты. Я не очень хорошо разбираюсь в алгоритме хэширования SHA-1. Как я могу получить максимальную отдачу от SHA-1 MessageDigest
? Есть ли определенный размер куска, который я должен переваривать, или несколько значений определенных размеров, которые я должен попробовать?
Чтобы ответить на некоторые вопросы, которые вы думаете о выяснении:
- Да, я переваривания, как прочитать файлы (
MessageDigest.update
), так что байты только переваривают один раз. - Сборники SHA-1 используются в качестве контрольных сумм, как правило, для файлов, которые должны быть zlib/завышены.
- Нет, я не могу использовать другой хеш.
- Да, я знаю, что zlib уже использует контрольные суммы, но внешние требования определяют использование хэшей SHA-1 поверх этого. Я не могу придумать вескую причину, почему (+1, если вы можете) :-)
Если это IO на вашем локальном компьютере, который должен выполнить эту работу, я предлагаю инвестировать в SSD-диск, так как я подозреваю, что на самом деле чтение файлов с жесткого диска является узким местом здесь. –
Я уже сделал все возможное, чтобы оптимизировать ввод-вывод. Я уже рассмотрел различные оптимизации IO, и профайлер говорит, что IO занимает столько же времени, сколько и переваривание.Я уверен, что я не могу сделать ничего лучше с IO –
Java медленнее по сравнению с C/C++, но в некоторых задачах это немного быстрее. Если у вас есть доступ к реализации вашего алгоритма на C/C++, выполните сравнение. Если java значительно медленнее, возможно, есть возможности для улучшения, но если они почти равны, вероятно, есть небольшие шансы на улучшение. (Я сделал сравнение с C и Ds, когда у меня была куча математики, и оказалось, что моя версия java была самой быстрой). –