Я абсолютно n00b в java-платформу
Я хотел бы знать, нужно ли мне что-то менять в моем коде, чтобы получить преимущества 64-битной JRE?
или это что-то вроде того, когда я запускаю его с помощью "java -d64", он будет запускаться в каком-то турбо-режиме?
Ваша помощь высоко ценится
Ответ 1
Моя предыдущая версия, а не ложная, была быстро написанной упрощенной процедурой.
Переход от 32 до 64 бит автоматически не заставит ваше приложение работать быстрее, в некоторых случаях это может привести к обратному.
На "отрицательной" стороне
Выполнение удаления ссылок на указатели памяти в JVM может занять больше времени с 64-разрядными указателями, чем 32 бит.
Полный сбор мусора и уплотнение кучи размером 16 ГБ, скорее всего, займет больше времени, чем с кучей в 2 ГБ.
С положительной стороны:
Там 64-битные инструкции процессора более эффективны, чем 32-разрядные.
64-разрядная JVM позволит вам иметь размер кучи 2 ^ 32 раза больше, чем чуть меньше, чем 4 ГБ, который вы можете получить с 32 бит. (Если вы можете позволить себе купить этот объем оперативной памяти)
Некоторые JVM могут работать со сжатыми ссылками, если у вас размер кучи менее 4 ГБ, что дает вам преимущество в 64-битных инструкциях без необходимости платить 64-разрядную цену отмены ссылки.
Если у вас хорошая JVM, я бы пошел на 64 бита независимо от размера кучи, просто будьте готовы, чтобы вам, возможно, потребовалось получить удар производительности за действительно большую кучу.
Ответ 2
Я не думаю, что 64-разрядная JVM получит производительность приложения? Как?
Фактически 64-разрядные процессоры немного медленнее. У них более сложный конвейер декодирования (обратная поддержка 32-разрядных операций). Им нужно больше пропускной способности памяти (все указатели имеют двойной размер)? Единственное, что у вас на 64-битном процессоре - это много оперативной памяти. И размер - это скорость, как мы знаем. Много оперативной памяти может повысить производительность некоторых приложений очень красиво (если приложение может его использовать). Так что 64 бит - нет. Много ОЗУ - определенно да.
Есть еще одна вещь, которую 64-битные процессоры могли бы сделать быстрее. Атомная запись/чтение 64-битных номеров. Если вы работаете с 64-разрядными номерами (длинными в java), то 64-битные процессоры будут лучше, потому что у них есть машинные инструкции CAS для работы с такими номерами.
Ответ 3
Нет, вам ничего не нужно менять.
Нет встроенной выгоды, использующей 64 бит. Фактически, это сделает вашу программу более крупной в памяти, поскольку все указатели станут 64-битными, а не 32-битными.
Единственное преимущество заключается в том, что вы выполняете 64-битные вычисления, например, используя много "длинный" в вашем коде или если вашему приложению требуется память более 4 ГБ.
Ответ 4
Поскольку JVM, в котором выполняется код, должен вести себя одинаково (целые числа всегда содержат 32 бита и т.д.), ваш код гарантирован (теоретически) для запуска одинаково, независимо от того, на какой платформе вы его запускаете.
Разница в 32/64 бит заключается в том, как JVM может оптимизировать время выполнения. Таким образом, хотя исполняемый байт-код остается неизменным, он может (или не может) быть оптимизирован по-другому.
В двух словах 64-разрядная система, работающая под Java, может выполнять код быстрее, чем 32-разрядный эквивалент системы.
Ответ 5
Вам нечего менять. В отличие от C или С++ Java имеет спецификацию, написанную для нее, которая гарантирует, что int (и другие типы данных) всегда имеют одинаковую длину независимо от того, на какой платформе вы находитесь.
Ответ 6
Есть ли у вас JNI в коде приложения? Тогда, возможно, вам нужно беспокоиться о битных файлах с 32 по 64 бит.
32 или 64 все равно для вашего Java-кода. Аспекты производительности уже хорошо отражены в предыдущих плакатах.
Ответ 7
Да, вам ничего не нужно менять. Это JRE, который отличается от кода, который вы пишете.
Ответ 8
Я обнаружил, что 64-битные JVM были медленнее, чем 32-разрядные версии. Однако с последней версией обновления для Java 6 я видел, что многие из моих тестов немного быстрее с 64-битной версией и 32-разрядной версией. В любом случае разница составляет от 5% до 10%.
Независимо от того, использует ли ваша программа 32-разрядная или 64-разрядная версия, вы можете использовать JVM. Как уже упоминалось, вам нужно проверить, что у вас есть соответствующие общие библиотеки. (или в идеале нет)
Основное отличие заключается в том, что вы можете использовать больше памяти esp, если вам нужно 4 ГБ или более.
Ответ 9
Попробуйте следующее:
public class Benchmark {
public static void main(String args[]) {
long time = System.currentTimeMillis();
for (int a = 1; a < 900000000; a++) {
for (int b = 1; b < 20; b++) {
}
}
long time2 = System.currentTimeMillis() - time;
System.out.println("\nTime counter stopped: " + time2);
}
В 32 и 64 бит и смеяться над разницей.