预先存储Java JVM最大堆大小

有很多关于堆大小的文章和站点,但是他们没有提到如何找出调用jvm时可以保留的最大可能堆大小。

该任务是以最大可用堆大小xmx = max动态启动我的jvm(无需在此处讨论此任务的对象!)。

人们会想到读取当前可用或空闲的内存,并将该大小用于xms和xmx。 但这不起作用。

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

jvm以32位启动! 根据其他站点和帖子,比如:64位操作系统上32位JVM的最大Java堆大小,它应该在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米,这是最大的可能!

因此,我的问题:如何预先调用堆栈大小调用jvm,没有试验的错误?

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

  • 选择你检查应用程序的堆需要约。 如果堆不可行,让用户死于错误
  • 尝试一个错误:降低堆并重新运行您的应用程序,直到找到有效的最大堆
  • 使用这种秘密的方式来确定保证的最大堆大小,并顺利运行(如果是这样,请放在你的信任圈:))
  • 我非常好奇你的答案!


    如何预先调用jvm的堆大小,而无需试验和错误?

    没有办法。

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

    (如果有办法,那么你可以肯定Oracle会知道并会告诉我们这件事。)

    问题在于等式中有太多“变量”,其中许多是“隐藏变量”。

    链接地址: http://www.djcxy.com/p/82897.html

    上一篇: Java JVM max heap size reservable upfront

    下一篇: Cannot make large enough