2

在Windows 10 64 位64 位 JVM上运行的 Java 进程的最大堆大小是多少?我的机器有8 GB的 RAM。我正在运行Java 8。出于实验目的,我试图在巨大的图表上运行 BFS。在运行 BFS 时,我正在监视Java Visual VM中使用的堆大小。根据 Visual VM 堆利用率始终小于 2000 MB,无论提供以下 JVM 参数

-Xms2048m
-Xmx3072m
-XX:ReservedCodeCacheSize=240m
-XX:+UseConcMarkSweepGC
-XX:SoftRefLRUPolicyMSPerMB=50
-ea
-Dsun.io.useCanonCaches=false
-Djava.net.preferIPv4Stack=true
-XX:+HeapDumpOnOutOfMemoryError
-XX:-OmitStackTraceInFastThrow

我在互联网上做了一些研究,但找不到与我正在使用的系统规范相关的任何具体答案。java 进程能否在 Windows 10 64 位和 64 位 JVM 上使用超过 2 GB 的空间?作为Java 堆大小的指南,Windows XP/2008/7 的限制是 2 GB。

4

4 回答 4

4

在 64 位机器上,使用 64 位 JVM,您可以处理数 GB 的堆(数十和数十 GB)。除了可用内存(以及 64 位指针的理论地址空间)之外,我不确定它是否受到任何方式的限制。

当然,如果你正在处理一个巨大的堆,GC 有很多工作要做,你可能会发现你需要水平扩展而不是垂直扩展,以保持良好的性能。

如果 VisualVM 没有显示您使用超过 2GB(用 给出的初始堆大小-Xms),那么它可能不需要更多。您已授予使用最多3GB ( -Xmx) 的权限,但 JVM 不会仅仅为了好玩而分配更多内存。

于 2017-04-07T10:21:34.577 回答
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 Runtime Environment (build 1.7.0_80-b15) Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, 混合模式)

C:\Users\mpalanis>java -Xmx1600G -version

VM 初始化期间发生错误无法为请求的 1677805568KB 堆分配 52431424KB 位图以进行并行垃圾回收。

错误:无法创建 Java 虚拟机。

错误:发生了致命异常。程序将会退出。

希望这个解释有所帮助。

于 2017-04-08T06:05:34.857 回答
1

可以为 32 位 JVM 分配的最大堆为 2^32 = 4G,同样 4gb 将被划分为 1+ GB 供 VM 用于运行时类。它会改变 windows 约为 2GB,而 linux 约为 3GB。当您使用 64 位机器时,最大可用堆为 2^64,它足以让您轻松运行 BFS。

您可以使用 vm 标志监视可用内存“-XX+PrintFlagsFinal | grep -iE HeapSize”将告诉您可以使用的最大可用堆大小。配置略低于此并开始使用...

于 2017-04-07T16:27:03.247 回答
0

如果您使用 IntelliJ Idea 作为 IDE,您可以直接从中执行此操作,

  1. 从主菜单中,选择帮助 | 更改内存设置
  2. 设置您要分配的必要内存量,然后单击保存并重新启动。

这会更改 JVM 使用的-Xmx选项的值,并使用新设置重新启动 IntelliJ IDEA。

于 2020-02-12T10:41:18.040 回答