繁体   English   中英

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

[英]How can I allocate 8 GB ( not 1 GB ) RAM to my JDK on windows

Windows上的JDK最多需要大约2 GB RAM。 即使我们为JDK分配了更多RAM; 它并不需要它。 如果我需要在Windows上运行需要8 GB RAM的进程,请执行以下步骤: 我怎么能实现它?

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

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

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

据我所知,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位版本的Windows上使用64位JDK一样,限制变成8TB

如果使用-ms8g -mx8g且启动正确,则其“最小”堆大小为8 GB。 但是,如果您的程序不使用8 GB,则可能仍然只有2 GB或更少。 即,无论您设置了什么设置,hello World程序都不会使用8 GB。 (除了一个晦涩的地方,我认为没有任何用处;)

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

值得注意的是,64位JVM仍使用32位引用,最大堆大小约为30 GB。 也就是说,引用不是普通的内存地址,就像32位程序一样。

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

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

如果您有大量的缓存数据,则最好将它们驻留在Java堆之外。 否则,GC将花费大量时间遍历它,反复且毫无结果。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM