6

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

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

Mathematica 函数ReinstallJava采用参数命令行。我试着做

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

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

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

4

2 回答 2

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

(我曾经通过阅读中的代码绝望地C:\Program Files\Wolfram Research\Mathematica\7.0\SystemFiles\Links\JLink\Kernel发现了这一点。在注意到它被列出后,Options[ReinstallJava]它似乎有点明显......)

于 2009-06-18T00:56:40.520 回答
3

对于 Mac OS X 用户,更换

ReinstallJava[JVMArguments -> "-Xmx64g"];

经过

ReinstallJava[CommandLine -> "java", JVMArguments -> "-Xmx64g"];
于 2012-07-11T15:13:27.390 回答