Mathematica & J / Link: ограничения памяти? - PullRequest
6 голосов
/ 14 июня 2009

Я выполняю тесты с интенсивным использованием вычислений с использованием Mathematica и его интерфейса J / Link Java.

Эталонный тест останавливается, если достигается объем памяти около 320 МБ, так как это, по-видимому, предел, и сборщику мусора требуется все больше и больше времени, и он в конечном итоге даст сбой.

Функция Mathematica ReinstallJava принимает командную строку аргумента. Я пытался сделать

ReinstallJava[CommandLine -> "java -Xmx2000m ..."]

но Mathematica, похоже, полностью игнорирует опцию -Xmx.

Как установить параметр памяти -Xmx для моей Java-программы? Откуда берется ограничение в 320 МБ? Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

9 голосов
/ 18 июня 2009

ReinstallJava принимает значение JVMArguments. Вы можете использовать его для передачи размера кучи следующим образом:

In[1]:= Needs["JLink`"]

In[2]:= Options[ReinstallJava]

Out[2]= {ClassPath -> Automatic, CommandLine -> Automatic, 
 JVMArguments -> None, ForceLaunch -> False, Default -> Automatic, 
 CreateExtraLinks -> Automatic, "Asynchronous" -> Automatic}

In[3]:= ?JVMArguments

JVMArguments is an option to InstallJava that
allows you to specify additional command-line
arguments passed to the Java virtual machine at
startup. The string you specify is added to the
command line used to launch Java. You can use this
option to specify properties with the standard -D
syntax, such as "-Dsome.property=true". This
option is not supported on Mac OSX. >>

In[4]:= LoadJavaClass["java.lang.Runtime"];

In[5]:= java`lang`Runtime`getRuntime[]@maxMemory[]

Out[5]= 238616576

In[6]:= ReinstallJava[JVMArguments -> "-Xmx64g"];

In[7]:= LoadJavaClass["java.lang.Runtime"];

In[8]:= java`lang`Runtime`getRuntime[]@maxMemory[]

Out[8]= 61084008448

(Однажды я в отчаянии разобрался с этим, прочитав код в C:\Program Files\Wolfram Research\Mathematica\7.0\SystemFiles\Links\JLink\Kernel. Заметив, что он указан в Options[ReinstallJava], это казалось очевидным…)

3 голосов
/ 11 июля 2012

Для пользователей Mac OS X:

ReinstallJava[JVMArguments -> "-Xmx64g"];

от

ReinstallJava[CommandLine -> "java", JVMArguments -> "-Xmx64g"];
...