2008-10-14 1 views
13

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

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

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

ответ

3

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

1

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

5

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

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

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

7

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

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

+0

Разве не одно преимущество, по крайней мере на Windows, возможность использовать больше памяти, чем около 1,5 ГБ? Существует некоторый такой предел для 32-битного Java-процесса. http://mystyleit.com/blogs/mystyleit/archive/2009/05/27/32bit-windows-memory-and-java.aspx – Jonik 2009-07-24 11:55:03

+1

Не последние 64-разрядные JVM немного умнее в назначении ссылок? I.e., используя только 32-битные ссылки, если он не нуждается в полном 64-битном. Кажется, я это где-то читал. – 2009-07-24 12:10:29

13

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

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

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

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

8

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

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

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

+2

набор инструкций AMD64 предоставляет больше программ для программ, что приводит к улучшению скорости выполнения операции. – Sebastian 2014-03-21 22:37:46

2

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

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

0

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

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

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

0

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^