我有一个Java程序是由一个batch file,像这样行:
javaw -xms64m -Xmx1024m com.acme.MyProgram
但是,在某些计算机上,程序不会启动并显示以下消息:
无法为对象堆预留足够的空间。 无法创buildJava虚拟机。
这个问题似乎是内存分配池的最大尺寸大于电脑可以处理的。 将内存分配池的最大容量从1024m减less到512m似乎可以解决问题。
如何衡量目前在Linux上使用的内存带宽?
Linux上的javafx应用程序巨大的内存消耗(不是Windows)
如何在Python中使用psutil获得程序的最大内存使用率
从U-boot shell模式写入NVRAM
从C中的物理内存地址读取结构
有没有一种方法可以提前确定计算机上有多less内存(从batch file中),并确定是否在batch file调用中使用-Xmx1024m或-Xmx512m ? 请注意,这个batch file只需要在Windows上工作。
是否需要时间来释放内存?
你怎么知道一个文件是否被caching在内存中的Linux?
如何确定Linux中的进程内存限制?
为什么在TOP命令的详细列表中列出的SWAP大于摘要?
有一个命令,我可以打电话打印出malloc数据结构?
实际上Java VM已经做了类似的事情。 如果您不指定-xms或-Xmx ,则这些值是从机器上的物理内存量推断出来的。 或者至少如此说这个网页 。
您可以将-xms设置为使您的应用程序有用的最小堆大小,并让Java为-Xmx确定合适的值。
你可以看看这个页面的一些答案: 让JVM根据需要增加内存需求,达到VM限制的大小?
如果你的程序正常工作的最大堆积为512米,我会使用该值。
这就是说,我也会检查一下,看看是否有办法做你所要求的,因为这是一个有趣的问题。
您可以从您的批处理文件执行,检查退出时的错误级别,如果失败,则在较低的内存中重新启动。 我不确定错误级别是否可行 – 如果没有,你也可以检查程序执行的时间长度,小于10秒的任何事情都是免费的。
只是一些评论 –
如果你知道它不需要超过512,你应该运行一个测试,以确保1024实际上有帮助。 较大的堆可能经常使GC暂停更长时间,并且做其他事情。
如果你非常确定你会使用一定数量的内存(比如,堆将很容易地填满你分配的512),那么你应该把min设置为这个数。 如果你的程序分配了一堆东西,但是不是情境的(总是使用大约相同数量的内存),那么将最小值和最大值都设置为512是很好的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。