如何在Windows上为我的JDK分配8 GB(而不是1 GB)RAM

时间:2012-12-14 10:04:44

标签: jvm memcached java terracotta

Windows上的JDK最多占用2 GB RAM。即使我们为JDK分配了更多的RAM;它并不需要它。如果我需要在Windows上运行需要8 GB RAM的进程;我怎么能实现它?

我们是否有任何其他提供商提供的JDK可以支持它? Memcached为我们提供了额外的缓存,可以使用......但这不是我想要的。假设我需要在我的Windows机箱上运行带有8 GB RAM的jMeter; Memcached肯定不会帮助肯定.. 有没有提供给我这个的提供者?我以前认为兵马俑这样做;但看起来像是Memcached。

我正在使用Windows 7.如果需要,我也可以使用Windows Server ..我只需要让它运行。

5 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

据我所知,Windows上每32位进程有2GB的内存限制。但是,此页面似乎表明有一些寄存器设置可以扩展到3GB。特别是IMAGE_FILE_LARGE_ADDRESS_AWARE

http://msdn.microsoft.com/en-gb/library/windows/desktop/aa366778(v=vs.85).aspx

因此,如果您正在使用32位JDK并坚持使用它,那么这是您最好的选择,但是如果您可以升级到64位JDK,那就好像您在64位版本上使用64位JDK一样Windows的这个限制变为8TB

答案 2 :(得分:1)

如果您使用-ms8g -mx8g并且它正确启动,那么它的“最小”堆大小为8 GB。但是,如果您的程序不使用8 GB,它仍然可能只有2 GB或更少。即,无论您给出什么设置,问候世界程序都不会使用8 GB。 (除了一个不起眼的,我认为没有任何用途;)

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

值得注意的是,64位JVM仍然使用32位引用,最大堆大小约为30 GB。即引用不是普通的存储器地址,因为它们适用于32位程序。

答案 3 :(得分:0)

我在我的64位Windows机器上成功使用了12G(-Xmx12G),并且(64位)JVM使用了它的每一个字节。

我偶然发现的唯一问题是,有时需要在命令行上明确提供-d64,如果它是64位JDK / JRE则为事件。

答案 4 :(得分:0)

如果你有大量的缓存数据,它们最好不在java堆中。否则,GC将花费大量时间遍历它,反复且毫无结果。

Terracotta的BigMemory通过将数据放在Java堆之外的直接ByteBuffer来实现这一点。也许有免费/开放的。