2009-06-14 8 views
5

Sto facendo un benchmark intensivo di elaborazione utilizzando Mathematica e la sua interfaccia J/Link Java.Mathematica e J/Link: vincoli di memoria?

Il benchmark si blocca se si raggiunge un footprint di memoria di circa 320 MB, poiché questo sembra essere il limite e il garbage collector ha bisogno di sempre più tempo e alla fine fallirà.

La funzione Mathematica ReinstallJava accetta l'argomento riga di comando. Ho provato a fare

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

ma Mathematica sembra ignorare completamente l'opzione -Xmx.

Come è possibile impostare l'opzione di memoria -Xmx per il mio programma java? Da dove viene il limite di 320 MB? Qualsiasi aiuto sarebbe molto apprezzato.

+1

Come m la tua memoria fisica è sulla tua macchina? –

+0

32 GB - sicuramente più di 320 MB –

risposta

8

ReinstallJava accetta un'opzione JVMArguments. Si può usare per passare dimensione heap in questo modo:

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 

(una volta ho capito questo in preda alla disperazione per la lettura attraverso il codice C:\Program Files\Wolfram Research\Mathematica\7.0\SystemFiles\Links\JLink\Kernel Dopo aver notato che è stato elencato nel Options[ReinstallJava] sembrava abbastanza ovvio ....)

3

Per gli utenti di Mac OS X, sostituire

ReinstallJava[JVMArguments -> "-Xmx64g"]; 

da

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