在 Windows 10 64位上运行的Java进程的最大堆大小是多少, 64位JVM ?我的机器有 8 GB 的RAM。我正在运行 Java 8 。 我试图在巨大的图上运行BFS用于实验目的。在运行BFS时,我正在监视 Java Visual VM 中使用的堆大小。根据Visual VM,无论提供以下JVM参数,堆利用率始终小于2000 MB
-Xms2048m
-Xmx3072m
-XX:ReservedCodeCacheSize=240m
-XX:+UseConcMarkSweepGC
-XX:SoftRefLRUPolicyMSPerMB=50
-ea
-Dsun.io.useCanonCaches=false
-Djava.net.preferIPv4Stack=true
-XX:+HeapDumpOnOutOfMemoryError
-XX:-OmitStackTraceInFastThrow
我通过互联网进行了一些研究,但找不到与我正在使用的系统规范相关的任何具体答案。在Windows 10 64位和64位JVM上,java进程可以使用2 GB以上的数据吗?作为Guidelines for Java Heap sizing,Windows XP / 2008/7的限制为2 GB。
答案 0 :(得分:3)
在具有64位JVM的64位计算机上,您可以使用多GB堆(几十GB和几十GB)。除了可用内存(以及64位指针的理论地址空间)之外,我不确定它是否有任何限制。
当然,如果您正在使用大堆,GC还有很多工作要做,您可能会发现需要水平扩展而不是垂直扩展,以保持良好的性能。
如果VisualVM没有显示你使用超过2GB(用-Xms
给出的初始堆大小),那么它可能只是不需要更多。您已获得使用最多 3GB(-Xmx
)的权限,但JVM不会为了它的乐趣而分配更多内存。
答案 1 :(得分:1)
可以为32位JVM分配最大堆是2 ^ 32 = 4G,同样4gb将分为1+ GB,以供VM用于运行时类。它的窗口大约为2GB,linux为~3GB。 当您使用64位机器时,最大可用堆数为2 ^ 64,它足以让您轻松运行BFS。
您可以使用vm标志监视可用内存“-XX + PrintFlagsFinal | grep -iE HeapSize”将告诉您可以使用的最大可用堆大小。配置略低于此并开始使用...
答案 2 :(得分:1)
您无法为64位体系结构指定明确的大小,但简单的测试可帮助您找到可用于或可为进程分配的最大连续空间。可以使用简单的命令测试如下。 请尝试以下方式 java -Xmx -version 如果上面的命令给出了结果,那么可以允许你的系统将Xmx放到该级别,如果失败那么你就不能指定该值。
很少从系统测试。 我用20G.40g,100G,160G,300G测试了这些值,所有这些都给了java -version输出,但尝试用1600G抛出错误。 输出测试 C:\ Users \ mpalanis> java -Xmx300G -version
java版" 1.7.0_80" Java(TM)SE运行时环境(版本1.7.0_80-b15) Java HotSpot(TM)64位服务器VM(内置24.80-b11,混合模式)
C:\ Users \ mpalanis> java -Xmx1600G -version
VM初始化期间发生错误 无法为请求的1677805568KB堆分配52431424KB位图以进行并行垃圾回收。
错误:无法创建Java虚拟机。
错误:发生了致命异常。程序将退出。
希望这个解释有所帮助。
答案 3 :(得分:1)
如果您将IntelliJ Idea用作IDE,则可以直接从中进行操作
这将更改JVM使用的 -Xmx 选项的值,并使用新设置重新启动IntelliJ IDEA。