有很多关于堆大小的帖子和站点,但是他们都没有提到如何找出我在调用jvm时可以保留的最大可能堆大小.
任务是以最大可用堆大小xmx = max动态启动我的jvm(不需要在这里讨论这个任务的对象!).
人们会想到读取当前可用或可用的内存并将该大小用于xms和xmx.但这不起作用.
例如在64位计算机和Windows操作系统上,24GB内存,可用虚拟内存大约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
Run Code Online (Sandbox Code Playgroud)
用以下方法调用Java程序:
java -Xms1536m -Xmx1536m myApp
导致:
无法为1572864KB对象堆保留足够的空间
同样一直到1136米,这是最大的可能!
因此我的问题:如何预先检查堆大小可能调用jvm,而不试用错误?
UDPATE:根据这些评论,我提出了另一个问题,那就是那些Pro:你们如何运行Java应用程序?
我对你的答案非常好奇!
如何预先检查调用 jvm 可能的堆大小,而无需反复试验?
没有办法。
当然,没有一种方法可以根据您/我必须提供的信息类型 给出可靠的答案。
(如果有办法,那么您可以确信 Oracle 会知道并且会告诉我们。)
问题在于方程中的“变量”太多,而且很多都是“隐变量”。
| 归档时间: |
|
| 查看次数: |
395 次 |
| 最近记录: |