【问题标题】:Java heap size problem in MATLABMATLAB中的Java堆大小问题
【发布时间】:2011-08-29 18:44:41
【问题描述】:

我正在尝试通过 MATLAB 运行 java 程序。当我的输入文件很小时,它可以正常工作。但是当我增加文件大小并反过来增加我的堆大小时,我会收到以下错误消息:

虚拟机初始化时出错

无法为对象堆保留足够的空间

无法创建 Java 虚拟机。

当我使用 -Xmx1500m 运行我的 java 命令时,它可以正常工作,但是当我将它增加到 -Xmx2000m 时,它会给出错误消息。我使用的计算机有 12 GB 内存,所以我不明白为什么将堆大小增加到 2000 应该是个问题。我没有运行任何内存阻塞程序。

【问题讨论】:

    标签: java matlab memory heap-memory


    【解决方案1】:

    看来您使用的是 32 位 JVM。 Java 的堆需要一个连续内存块,并且根据操作系统,这限制在 1.2 到 1.6 GB,具体取决于您的操作系统,无论您拥有多少内存。

    如果您使用 64 位 JVM,则不会出现此问题。

    【讨论】:

    • 我想我使用的是 64 位 java。如果我在命令提示符中键入“java -D64 -version”,我会得到:“java version“1.6.0_22”/“Java(TM) SE Runtime Environment (build 1.6.0_22-b04)”/“Java HotSpot(TM ) 64 位服务器 VM(内部版本 17.1-b03,混合模式)"
    • -D64 将名为64 的属性设置为值null。你的意思是-d64,它只适用于 Solaris AFAIK。由于 MATLAB 分叉 Java 进程的方式,这一定是一个限制。我假设您可以从命令行创建这种大小的 JVM?
    • 我正在运行 64 位 Windows 7 企业版。任务管理器 => 性能说我总共有 12285 MB 物理内存,其中 7082 MB 是空闲的。我已经尝试重新启动,但它并没有解决问题。感谢您的帮助。
    • 听起来确实像 Peter 所说的那样,您正在获得一个 32 位 JVM。我可以在我的 x64 XP 上重现运行 JDK 发行版中的 demo/jfc/fileChooserDemo。您究竟是如何从 Matlab 中调用您的 Java 程序的?如果是system,确切的命令行是什么?如果您在 Windows x64 上运行 32 位 Matlab,Matlab 可以更改环境,包括路径,或者拉入 WoW64,这将改变您在脱壳时拉入的程序。
    • Peter - 在这种情况下,碎片和可用系统内存可能无关紧要。 JVM 堆只需要在 JVM 进程的虚拟内存地址空间内是连续的,操作系统可以根据需要将页面映射到物理内存或交换空间。例如。在我的具有 12 GB RAM 的 Win x64 机器上,我可以使用 64 位 JVM 执行 java -Xmx40G -jar FileChooserDemo.jar 并且它可以工作,在 procexp 中显示 40 GB 虚拟大小,即使这比我的总物理内存大得多,但要少得多可用内存。如果我有另一个已经填满 7 GB 的进程,则相同。 (见鬼,-Xmx1T 有效。)
    猜你喜欢
    • 2011-10-23
    • 2011-01-14
    • 2019-08-18
    • 1970-01-01
    • 1970-01-01
    • 2011-07-18
    • 1970-01-01
    • 2013-08-20
    • 2012-12-27
    相关资源
    最近更新 更多