У меня есть функция, которая выполняет несколько сотен миллионов итераций, пытаясь найти оптимальную комбинацию заданного набора возможностей. Все мои данные предварительно рассчитаны, и почти вся арифметика представляет собой простое сравнение >= или <= этих предварительно рассчитанных значений.
Мне интересно, есть ли преимущество в использовании определенных примитивных типов (int, long, double) при проведении этого простого сравнения.
Я знаю, что могу пойти и провести тест, чтобы увидеть, какой из них «лучший», но также важно понимать основную аргументацию. Например, возможно, int легче всего сопоставить, потому что он занимает меньше памяти, или, возможно, с плавающей запятой double легче узнать, какая степень 10 это значение, что в некоторых случаях ускоряет сравнение. Мне интересно знать эти основы, и простой тест мне этого не скажет.
сначала сделайте то, что правильно, затем измерьте, а затем измените что-нибудь, если это вообще необходимо.
@JacobG. что значит переполнение? Нравится превзойти Integer.MAX_VALUE? Все предварительно рассчитано, поэтому я мог подавить переполнение, уменьшив значения до желаемой степени 10, чтобы полностью избежать переполнения.
Это зависит от вашей JVM, операционной системы, процессора. Как вы уже предположили, да, пойдите и проверьте в своей конкретной среде.
@ Turing85 спасибо за -1, полагаю. Оптимизация не всегда преждевременна, как здесь.
@KaelEppcohen Ваше предположение неверно. Если вы определили, что у вас проблема с производительностью, поделитесь соответствующим кодом, а также (важными) данными о производительности вместо того, чтобы представлять частичное решение, чтобы избежать XY-проблема




Это преждевременная оптимизация. Вам следует выбрать один тип данных, создать на его основе реализацию и запустить тест производительности, используя вашу фактическую реализацию, а не какой-то выдуманный тест, который сравнивает десятки тысяч случайных значений определенного типа.
Причина для тестирования с использованием вашей конкретной реализации заключается в том, что существует ряд факторов, которые имеют гораздо большее влияние на скорость, чем время необработанных сравнений:
Невозможно измерить какие-либо из этих показателей, пока вы не реализуете свой фактический алгоритм. После того, как вы оптимизировали реальную реализацию для кеширования и ветвления, переключение базового типа данных становится относительно простой задачей.
Зависит от вашего варианта использования и от того, хотите ли вы иметь дело с переполнением.