Mathematica&J/Link:内存约束?

D-B*_*Bug 6 java wolfram-mathematica jlink

我正在使用Mathematica及其J/Link Java接口进行计算密集型基准测试.

如果达到大约320 MB的内存占用,基准就会停止,因为这似乎是限制,垃圾收集器需要越来越多的时间并最终会失败.

Mathematica函数ReinstallJava接受参数命令行.我试着这样做

ReinstallJava[CommandLine -> "java -Xmx2000m ..."]
Run Code Online (Sandbox Code Playgroud)

但Mathematica似乎完全忽略了-Xmx选项.

如何为我的java程序设置-Xmx内存选项?320 MB的限制来自哪里?任何帮助将不胜感激.

and*_*otn 9

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
Run Code Online (Sandbox Code Playgroud)

(我曾经通过阅读代码来绝望地解决这个问题C:\Program Files\Wolfram Research\Mathematica\7.0\SystemFiles\Links\JLink\Kernel.注意到它被列入Options[ReinstallJava]其中似乎有点明显......)