Java JVM最大堆大小可预先保留

时间:2015-07-28 11:17:49

标签: java jvm heap

有很多关于堆大小的帖子和站点,但没有提到如何找出我在调用jvm时可以保留的最大可能堆大小。

任务是以最大可用堆大小xmx = max动态启动我的jvm(不需要在这里讨论这个任务的对象!)。

可以考虑读取当前可用或可用内存并将该大小用于xms和xmx。但这不起作用。

例如在64位计算机和Windows操作系统上,24GB内存,可用虚拟内存大约1.8 GB :(这些已由c#确定,在执行过程中执行Java命令)

jvm推出32位!根据其他网站和帖子,如:Maximum Java heap size of a 32-bit JVM on a 64-bit OS它应该超过1.4GB。

[09.07.2015 08:39:39] Total physical memory MB:        24002
[09.07.2015 08:39:39] Available physical memory MB:    16115
[09.07.2015 08:39:39] Total virtual memory MB:         2047
[09.07.2015 08:39:39] Available virtual memory MB:     1810

使用:

调用Java程序

java -Xms1536m -Xmx1536m myApp

导致:

  

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

同样一直到1136米,这是最大的可能!

因此我的问题: 如何在不调试错误的情况下提前检查堆大小可能是否有错误?

UDPATE: 基于这些评论,我提出了所有那些Pro的另一个问题: 你们是如何运行Java应用程序的?

  1. 选择您选中应用的堆需要约。并且如果该堆不可能,则让用户因错误而死亡
  2. 尝试错误:降低堆并重新运行应用程序,直到找到有效的最大堆
  3. 使用这种秘密方式确定保证最大堆大小并顺利运行(如果是这样,请放入您的信任圈:))
  4. 我对你的答案非常好奇!

1 个答案:

答案 0 :(得分:1)

  

如何预先检查调用jvm的堆大小,而不进行反复试验?

没有办法。

当然,根据您/我必须提供的信息类型,没有一种方法可以提供可靠的答案。

(如果有办法,那么你可以确定甲骨文会知道并且会告诉我们。)

问题是有太多的变量"在等式中,其中许多是"隐藏变量"。