C# Jak uruchomić Java VM z określoną ilością RAMu?


(kox8161) #1

Witam,

potrzebuję by mój program otwierał/wykonał pewien zewnętrzny plik JAR ale na VM z określoną pamięcią RAM. Zrealizowałem to przez wywołanie cmd.exe z parametrem.

System.Diagnostics.Process.Start(@"cmd.exe", "/c java -Xmx2048m -Xms1024m -jar \"plik.jar\"");

ale daje mi to tylko komunikat błędu w konsoli

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.

nadmienię że powyższe identyczne wywołanie wpisane bezpośrednio do konsoli normalnie uruchamia plik.

Czy jest ktoś w stanie nakierować mnie gdzie popełniam błąd albo jaką inną metodę użyć, bo prawdę pisząc nawet nie wiem w którym kierunku szukać rozwiązania.


(kostek135) #2

Moja teoria jest taka, że VM C# też zajmuje ileś tam pamięci. Jeśli uruchomisz aplikacje C# to może się okazać, że jest za mało dla Javy. Kiedy uruchamiasz przez konsole to C# nie pochłania pamięci, przez co może się okazać, że jest to mniej więcej tyle ile potrzeba Javie. Zmniejsz wartości i spróbuj wtedy.

-- Dodane 18.08.2013 (N) 0:51 --

Dodatkowo może pomimo technicznie istniejącej wystarczającej pamięci dojść problem, że VM-y z reguły alokują ciągły blok. 1GB ciągłej pamięci to bardzo dużo np. wyobraź sobie że masz blok 2GB komórek - 1komórka ciągłej pamięci (tak by było nieparzyście), i coś zaalokuje ci komórkę o przesunięciu 1GB (na samym środku tego bloku). Otrzymasz dwa bloki po 1GB - 1 komórka i już 1GB nie za alokujesz (a system będzie twierdził ze prawie 2GB są wolne, bo taka jest suma). Poza tym pamiętam, że był jakiś problem na Javie 32bitowej z powyżej około 1.5GB (więcej info tutaj)