Преимущества 64-битной платформы Java - PullRequest
13 голосов
/ 14 октября 2008

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

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

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

Ответы [ 9 ]

13 голосов
/ 14 октября 2008

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

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

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

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

8 голосов
/ 24 июля 2009

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

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

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

7 голосов
/ 14 октября 2008

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

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

5 голосов
/ 14 октября 2008

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

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

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

3 голосов
/ 14 октября 2008

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

2 голосов
/ 24 июля 2009

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

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

1 голос
/ 14 октября 2008

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

0 голосов
/ 28 января 2014

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

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

0 голосов
/ 25 июля 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...