Java-программирование для 64-битной JVM - PullRequest
5 голосов
/ 10 августа 2010

Несколько вопросов:):

Как определить, какая JVM установлена ​​в данный момент?(64-битная / 32-битная)

Нужно ли учитывать некоторые соображения при программировании для 64-битной целевой платформы JVM?

Может ли мой код Java работать на 32-битной и 64-битной JVM?

Как запустить приложение Java на 64-битной JVM?

Как определить, какая JVM используется для приложения Java?

Ответы [ 4 ]

10 голосов
/ 10 августа 2010

Обычно 64-битная jvm идентифицирует себя как таковая.

32/64 бит Соображения, которые я видел:

  1. адресное пространство - если вы не планируете использовать более 1,3 ГБ памяти, то не увидите разницы
  2. нативные библиотеки - если вы загружаете какие-либо библиотеки JNI, то они должны соответствовать вашей виртуальной архитектуре. Например, не пытайтесь загрузить 32-битные собственные библиотеки из 64-битного vm (без флагов типа -d32)

Да, один и тот же код будет работать на обеих виртуальных машинах.

Системное свойство "sun.arch.data.model" имеет флаг 32/64, я думаю.

Здесь есть некоторая полезная информация: http://www.oracle.com/technetwork/java/hotspotfaq-138619.html

4 голосов
/ 10 августа 2010

В вашем собственном Java-коде вам не нужно делать ничего особенного в отношении 32- или 64-разрядных.В отличие, например, от C и C ++, int в Java всегда составляет 32 бита, а long всегда составляет 64 бита (в C и C ++ размер этих типов зависит от системы).

Тамнет отдельных 32-битных и 64-битных версий байт-кода Java;байт-код точно такой же, независимо от того, что JVM, на которой вы его запускаете, является 32-битной или 64-битной.Вам не нужно по-разному компилировать исходный код Java для 32-битной или 64-битной версии.Что касается функциональности, то для вашего Java-приложения не имеет значения, работает ли оно на 32-битной или 64-битной JVM.

Могут быть некоторые технические различия, которые jowierun уже упоминал.Там также могут быть различия в производительности;Например, 64-битная JVM от Oracle для Windows настроена не так, как 32-битная JVM, она выполняет другие JIT-оптимизации.Я сам заметил это с приложением, требующим большого объема вычислений, которое я написал недавно;на 64-битной JVM он работает намного быстрее, чем на 32-битной JVM.(Но это только один пример, не принимайте это как доказательство того, что любая программа работает намного быстрее на 64-битной JVM).

2 голосов
/ 10 августа 2010

Если вы планируете писать собственный код с использованием собственного интерфейса Java (JNI), вы должны быть особенно осторожны при написании правильного кода C, который будет работать как на 64, так и на 32-битных машинах.Убедитесь, что вы используете правильные типы Java при передаче аргументов в / из Java-кода (JNI предоставляет набор typedefs для Java-типов), особенно при преобразовании массивов.И при тестировании вашего нативного кода, тестирование на обеих архитектурах (-m32 приведет к созданию 32-битной арки в GNU gcc) с разными JVM.

1 голос
/ 10 августа 2010

У вас есть эти вопросы задом наперед.

  1. Вам не нужно ничего делать в вашем Java-коде, он будет работать как на 32-но, так и на 64-битном.
  2. Поэтому вам не нужно знать, является ли это 64-битной JVM или нет.
...