我有一个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是很好的。
总结以上是内存溢出为你收集整理的dynamic设置java进程的最大堆大小全部内容,希望文章能够帮你解决dynamic设置java进程的最大堆大小所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)