Требуется ли 32-битному процессу больше памяти при работе в 64-битной системе?

StackOverflow https://stackoverflow.com/questions/1071029

Вопрос

У меня есть довольно требовательное к памяти Java-приложение.В моих 32-битных системах с Windows XP Professional приложение будет работать нормально, если я дам ему -Xmx1280m.Все, что ниже, в конечном итоге окажется в java.lang.OutOfMemoryError: Java heap space исключение.

Если я запускаю то же приложение на 64-битной Windows XP Professional (все остальное точно так же), оно требует -Xms1400m чтобы предотвратить состояние OutOfMemory.

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

Зачем ему нужно больше памяти на 64-битной машине?

Это было полезно?

Решение

Вероятно, потому, что виртуальная машина реализация отличается в 32/64-битной архитектуре тем, что она потребляет больше памяти (более широкие типы, разные GC).

Байт-код не имеет значения, когда он передает задачи базовой системе.Я не уверен, что Java и эффективное использование памяти — это два термина, которые я бы все равно объединил: P

Другие советы

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

Это та же причина, которую вы уже указали для программы C.64-битная система использует большие адреса памяти, что делает ее более «протекающей» (думаю, именно этот термин я слышал для ее описания).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top