![](/img/trans.png)
[英]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.