[英]Want to increase Java Heap Size to 4GB+: Physical Memory 8 GB, JVM 64-bit
[英]java : How to use heap beyond 4 GB memory in 32 bit JVM
我们有一个当前在 32 位 1.6 JRE 上运行的产品。 我们正在使用 Berkeley DB,它在 4 GB 地址空间中消耗了大约 2.5 GB RAM。 这为 JVM 地址空间留下了大约 750 MB 的内存。
我们目前正在解决当前设置的 OutOfMemory 问题。 最好将我们的 JVM 堆大小增加到 1.5 GB,同时仍保留 Berkeley DB 的 2.5 GB 空间。 有没有办法在 32 位 JVM 中访问超过 4 GB 的 RAM/堆? 我正在考虑以下解决方案
1) 使用 GC 性能更好的 JVM——这会给我带来边际结果——我可以获得大约 50-100 MB 的工作内存
2)像memcached或“进程外ehcache”之类的东西——这可以让我得到尽可能多的硬件允许的IPC/序列化开销。
是否有其他解决方案来增加应用程序的可寻址内存?
该解决方案应该适用于运行 sparc 的 solaris 10。
*更新:由于使用本机共享库,现在,即使操作系统是 64 位,我们也无法切换到 64 位 JVM *
谢谢,
是否有其他解决方案来增加应用程序的可寻址内存?
此外,每个真正的 SPARC(不是古老的 SuperSparc 或穷人 LION)都是 64 位的。 因此,切换到 64 位版本的操作系统会更容易。 我不了解 Solaris,但在 linux 中,可以在 64 位操作系统之上运行 32 位应用程序。 64 位操作系统将允许您运行 64 位 JVM。
更新:Solaris http://wikis.sun.com/display/BigAdmin/Talking+about+RAM+disks+in+the+Solaris+OS 中有 ramdisks,我认为您应该尝试使用它们来存储数据库(或临时文件数据库)。 不会像情况 (1) 那样有额外的序列化/IPC; 只有额外的读/写或 mmap/munmap。 但是 Ramdisk 比 SSD 快,比 HDD 快 3-4 个数量级。
32 位程序无法处理超过 4GB 的内存地址。 他们只是没有足够的位来表示更多的内存。
2^32 = 4 294 967 296
最好的办法是升级到 64 位 JRE。
我建议您在 32 位 JVM 中运行 32 位共享本机库,并在 64 位 JVM 中运行其他所有内容。 您可以让 64 位 JVM 调用 32 位 JVM 来完成它所做的任何事情。 我假设您的大部分数据/内存需求可以移至 64 位 JVM。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.