Jvm 如何在windows上为JDK分配8 GB(而不是1 GB)RAM

Jvm 如何在windows上为JDK分配8 GB(而不是1 GB)RAM,jvm,memcached,java,terracotta,Jvm,Memcached,Java,Terracotta,Windows上的JDK最多占用2GB内存。即使我们为JDK分配了更多的RAM;不需要了。如果我需要在Windows上运行一个需要8GB内存的进程;我怎样才能做到呢 我们是否有任何其他供应商提供的JDK可以支持它? Memcached为我们提供了额外的缓存,可以使用。。。但这不是我要找的。假设我需要在windows机箱上使用8GB RAM运行jMeter;Memcached肯定帮不上忙。。 是否有任何提供商向我提供此服务?以前我以为陶土就是这样的;但看起来这也像Memcached 我正在使用Wi

Windows上的JDK最多占用2GB内存。即使我们为JDK分配了更多的RAM;不需要了。如果我需要在Windows上运行一个需要8GB内存的进程;我怎样才能做到呢

我们是否有任何其他供应商提供的JDK可以支持它? Memcached为我们提供了额外的缓存,可以使用。。。但这不是我要找的。假设我需要在windows机箱上使用8GB RAM运行jMeter;Memcached肯定帮不上忙。。 是否有任何提供商向我提供此服务?以前我以为陶土就是这样的;但看起来这也像Memcached


我正在使用Windows7。如果需要,我也可以使用Windows Server。。我只需要让它运转起来

在64位操作系统上使用64位JDK修复了它

据我所知,Windows上每个32位进程有2GB内存限制。不过,此页面似乎表明存在将其扩展到3GB的寄存器设置。具体地说,图像\u文件\u大\u地址\u感知


因此,如果您正在使用32位JDK并坚持使用它,这是您最好的选择,但是如果您可以升级到64位JDK,就像您在64位版本的windows上使用64位JDK一样,此限制将变为8TB,我在64位windows机器上成功地使用了12G(
-Xmx12G
),并且(64位)JVM使用了它的每个字节


我遇到的唯一问题是,如果是64位JDK/JRE,有时需要在命令行上明确提供
-d64

如果使用
-ms8g-mx8g
并且正确启动,那么它的“最小”堆大小为8GB。但是,如果您的程序不使用8GB,它可能仍然只有2GB或更少。i、 e.hello World程序将不会使用8GB,无论您对其进行何种设置。(除了一个模糊的,我认为没有任何用处;)

32位是32位应用程序的有限地址空间。它仍然可以使用64位甚至128位数据。区别于它的是它能寻址的有限内存量。Windows将地址空间的分配用于自己的目的,这意味着堆的实际限制约为1.2-1.5 GB(而不是2^32,即4 GB)


值得注意的是,64位JVM仍然使用32位引用,堆大小约为30GB。i、 e.引用不是32位程序的普通内存地址。

如果有大量缓存数据,它们最好位于java堆之外。否则,GC将花费大量时间反复遍历它,而且毫无结果


Terracotta的BigMemory通过将数据放入直接ByteBuffer中来实现这一点,ByteBuffer位于Java堆之外。可能也有免费/开放的版本。

你应该知道你使用的是哪个版本的Windows,不管怎样,这更像是一个关于
serverfault
的问题。32位还是64位jdk?您需要64位才能获得2个以上的Gigs在64位计算机上从未见过该问题。我在Windows上有一个8GB xmx的java服务器,正如您链接到的页面所解释的,此限制仅适用于32位进程。使用64位Windows上的64位JRE,您不会有这个问题。正是@Jesper,我最初的答案是。。。。废话。。。(对自己好一点)我正在澄清你的评论。:)