Как правило, чем больше данных вам нужно перебрасывать, тем медленнее это происходит, поэтому даже на 64-битной виртуальной машине, придерживаясь int вместо long, в большинстве случаев быстрее.
Это становится очень понятным, если вы думаете с точки зрения использования памяти: массив 1 миллион ints требует 4MB, 1M long - 8MB.
Что касается скорости вычислений, есть некоторые накладные расходы для выполнения операций над 64-битными типами с 32-битными инструкциями. Но даже если виртуальная машина может использовать 64-битные инструкции (что должно быть на 64-битной виртуальной машине), в зависимости от процессора они все равно могут быть медленнее, чем их 32-битные аналоги (сложение / вычитание, вероятно, будет выполняться за один такт, но умножение и деление на 64-битные обычно медленнее, чем на 32-битные).
Очень распространенное заблуждение состоит в том, что целочисленная математика быстрее, чем математика с плавающей запятой. Как только вам понадобится выполнить дополнительные операции для «нормализации» ваших целых чисел, с плавающей запятой производительность вашей целочисленной реализации останется неизменной. Фактические различия в тактах, потраченных между целочисленными и с плавающей запятой, для большинства приложений незначительны, поэтому, если вам нужна плавающая точка, используйте ее и не пытайтесь эмулировать ее самостоятельно.
На вопрос, какой тип использовать на самом деле: Используйте тип, который наиболее подходит с точки зрения представления данных. Беспокойство о производительности, когда вы туда доберетесь. Посмотрите, какие операции вам нужно выполнить, и какую точность вам нужно. Затем выберите тип, который предлагает именно это. Судя по библиотекам, которые вы упомянули, победителем, вероятно, станет double.