2

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

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

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

4

5 回答 5

3

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

于 2012-12-14T10:07:52.037 回答
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 位版本的 Windows 上使用 64 位 JDK 一样限制变为 8TB

于 2012-12-14T10:08:01.723 回答
1

如果您使用-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 位程序的。

于 2012-12-14T11:01:23.390 回答
0

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

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

于 2012-12-14T15:09:55.780 回答
0

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

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

于 2012-12-14T10:36:24.273 回答