Преимущества 64-битной платформы Java

Я абсолютный n00b в платформе Java, я хотел бы знать, нужно ли мне что-то изменить в моем коде, чтобы получить преимущества 64-битной JRE?

или это что-то вроде того, когда я запускаю его с "java -d64", он будет работать в каком-то турбо-режиме?

Ваша помощь высоко ценится

9 ответов

Моя предыдущая версия, хотя и не ложная, была быстро написанным упрощением.

Изменение с 32 на 64 бита не приведет к автоматическому ускорению работы приложения, а в некоторых случаях может привести к обратному. На "отрицательной" стороне Выполнение разыменования указателей памяти в JVM может занять больше времени с 64-разрядными указателями, чем 32-разрядными. Полная сборка мусора и сжатие кучи размером 16 ГБ, вероятно, займет больше времени, чем при использовании кучи объемом 2 ГБ.

С другой стороны, есть инструкции по 64-битным процессорам, которые более эффективны, чем 32-битные. 64-битная JVM позволит вам иметь размер кучи в 2^32 раз больше, чем чуть меньше, чем 4 ГБ, которую вы можете получить с 32-битной. (Если вы можете позволить себе купить такой объем ОЗУ) Некоторые JVM могут работать со сжатыми ссылками, если размер кучи меньше 4 ГБ, что дает вам преимущество 64-битных инструкций без необходимости платить за 64-битную разыменование.

Если у вас хорошая JVM, я бы выбрал 64 бит независимо от размера кучи, просто будьте готовы к тому, что вам может потребоваться снижение производительности для получения действительно большой кучи.

Я не думаю, что 64-битная JVM получит производительность приложения? Как?

На самом деле 64-битные процессоры немного медленнее. У них более сложный конвейер декодирования (обратная поддержка 32-битных операций). Они нуждаются в большей пропускной способности памяти (все указатели имеют двойной размер, верно?). Единственное, что у вас есть на 64-битном процессоре - это много оперативной памяти. А размер - это скорость, как мы знаем. Много ОЗУ может очень неплохо повысить производительность некоторых приложений (если приложение может их использовать). Так что 64 бит - нет. Много оперативной памяти - определенно да.

Есть еще одна вещь, которую 64-битные процессоры могли бы делать быстрее. Атомная запись / чтение 64-битных чисел. Если вы работаете с 64-разрядными числами (длинные в java), 64-разрядные процессоры были бы лучше, потому что у них есть машинные инструкции CAS для работы с такими номерами.

Нет, вам не нужно ничего менять. Не существует неотъемлемого преимущества использования 64 бит. Фактически это увеличит объем вашей программы в памяти, поскольку все указатели станут 64-разрядными, а не 32-разрядными.

Единственное преимущество приходит, когда вы выполняете 64-битные вычисления, например, используете много "длинных" в вашем коде или если вашему приложению требуется память более 4 ГБ.

Поскольку JVM, где выполняется код, должен вести себя одинаково (целые числа всегда имеют 32-битную подпись и т. Д.), Ваш код гарантированно (теоретически) будет работать одинаково, независимо от того, на какой платформе вы его выполняете.

Разница в 32/64 бита заключается в том, как JVM может оптимизировать время выполнения. Таким образом, хотя исполняемый байт-код остается тем же самым, он может (или не может) быть оптимизирован по-другому.

Короче говоря, 64-битная система с Java может выполнять код быстрее, чем 32-битный системный эквивалент.

Вы должны ничего не менять. В отличие от C или C++, для Java написана спецификация, которая гарантирует, что целые числа (и другие типы данных) всегда имеют одинаковую длину, независимо от того, на какой платформе вы находитесь.

Есть ли у вас JNI в коде приложения? Тогда, возможно, вам нужно беспокоиться о 32-битных и 64-битных собственных двоичных файлах.

32 или 64 все то же самое для вашего кода Java. Аспекты производительности уже хорошо освещены в предыдущих постерах.

Да, вам не нужно ничего менять. Отличается JRE, а не код, который вы пишете.

Я обнаружил, что 64-разрядные JVM работают медленнее, чем 32-разрядные версии. Однако с последней версией Java 6 update 14 я видел, что многие мои тесты незначительно быстрее с 64-битной версией по сравнению с 32-битной. В любом случае разница составляет всего 5-10%.

Независимо от того, использует ли ваша программа 32-битную или 64-битную версию, вы выбираете JVM, которую вы используете. Как уже упоминалось, вы должны проверить, что у вас есть соответствующие общие библиотеки. (или в идеале нет)

Основное отличие заключается в возможности использовать больше памяти, особенно если вам нужно 4 ГБ или больше.

Попробуй это:

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 бит и смеяться над разницей.

Другие вопросы по тегам