2009-06-14 11 views
5

Je fais un benchmark gourmand en calcul en utilisant Mathematica et son interface Java J/Link. Le benchmark s'arrête si une empreinte mémoire d'environ 320 Mo est atteinte, car cela semble être la limite et le garbage collector a besoin de plus en plus de temps et finira par échouer.Mathematica & J/Link: Contraintes de mémoire?

La fonction Mathematica ReinstallJava prend la ligne de commande d'argument. J'ai essayé de faire

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

mais Mathematica semble ignorer complètement l'option -Xmx.

Comment puis-je définir l'option de mémoire -Xmx pour mon programme Java? D'où vient la limite de 320 MB? Toute aide serait grandement appréciée.

+1

Comment m ue mémoire physique est sur votre machine? –

+0

32 Go - certainement plus de 320 Mo –

Répondre

8

ReinstallJava prend une option JVMArguments. Vous pouvez l'utiliser pour passer la taille de tas comme ceci:

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 

(Une fois, je compris cela en désespoir de cause en lisant le code C:\Program Files\Wolfram Research\Mathematica\7.0\SystemFiles\Links\JLink\Kernel Après avoir remarqué qu'il figurait dans Options[ReinstallJava] il semblait assez évident ....)

3

Pour les utilisateurs de Mac OS X, remplacez

ReinstallJava[JVMArguments -> "-Xmx64g"]; 

par

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