Требуется ли 32-битному процессу больше памяти при работе в 64-битной системе?
-
21-08-2019 - |
Вопрос
У меня есть довольно требовательное к памяти 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-битная система использует большие адреса памяти, что делает ее более «протекающей» (думаю, именно этот термин я слышал для ее описания).