Estou tentando iniciar um aplicativo Java a partir de um arquivo em lote, com um tamanho de heap 2G, assim:
java -Xmx2G -XX:MaxPermSize=256M -jar cauldron-1.7.10-1.1236.05.212-server.jar nogui
Ao executar esse comando a partir de um arquivo em lotes, o Windows tenta iniciá-lo usando uma JVM de 32 bits que falha terrivelmente, porque um heap 2G é muito grande para uma JVM de 32 bits.
D:\directory>java -Xmx2G -XX:MaxPermSize=256M -jar minecraft_server.1.7.10.jar nogui
Error occurred during initialization of VM
Could not reserve enough space for object heap
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
A adição do sinal -d64
para tentar forçar uma JVM de 64 bits confirma que o Windows está tentando iniciar isso em uma JVM de 32 bits.
D:\directory>java -d64 -Xmx2G -XX:MaxPermSize=256M -jar minecraft_server.1.7.10.jar nogui
Error: This Java instance does not support a 64-bit JVM.
Please install the desired version.
No entanto, quando executo exatamente o mesmo comando em um console do PowerShell, o Windows decide usar o Java de 64 bits e tudo funciona bem.
Eu estou supondo que a variável de caminho é diferente para um arquivo em lote vs. um console do powershell.
Qual é a causa raiz deste problema, como posso corrigi-lo e como posso impedir que isso aconteça novamente?
Adendo:
Saída de java -debug -version
de um arquivo em lotes:
D:\directory>java -debug -version
java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) Client VM (build 24.45-b08, mixed mode, sharing)
E de um PowerShell:
PS D:\ATLauncher_Hacking\install> java -debug -version
java version "1.7.0_40"
Java(TM) SE Runtime Environment (build 1.7.0_40-b43)
Java HotSpot(TM) 64-Bit Server VM (build 24.0-b56, mixed mode)
Editar: executando ECHO %PATH%
de um arquivo em lote - vejo que C:\Program Files\Java\jre7\bin
está no caminho.