SORU
16 EYLÜL 2009, ÇARŞAMBA


Bir maksimum Java yığın boyutu 32-bit 64-bit JVM üzerinde OS

Soru değil, maksimum öbek boyutu 32-bit işletim sistemi, verilen bu 32-bit İşletim sistemleri var en fazla adreslenebilir bellek boyutu 4 GB, JVM maksimum öbek boyutu bağlıdır ne kadar bitişik boş bellek olabilir saklıdır.

64-bit 32-bit JVM çalışan bir işletim sistemi için (teorik ve pratik olarak ulaşılabilir hem) maksimum yığın boyutu bilerek daha çok ilgileniyorum. Temelde, cevapları the figures in a related question on SO benzer bakıyorum.

Nedeni hakkında bir 32-bit JVM yerine kullanılır Bir 64-bit bir tek sebebi teknik değil daha ziyade idari/bürokratik - muhtemelen çok geç yüklemek için bir 64-bit JVM üretim ortamı.

CEVAP
11 AĞUSTOS 2011, PERŞEMBE


Java çalışma Zamanı sorabilirsiniz:

public class MaxMemory {
    public static void main(String[] args) {
        Runtime rt = Runtime.getRuntime();
        long totalMem = rt.totalMemory();
        long maxMem = rt.maxMemory();
        long freeMem = rt.freeMemory();
        double megs = 1048576.0;

        System.out.println ("Total Memory: "   totalMem   " ("   (totalMem/megs)   " MiB)");
        System.out.println ("Max Memory:   "   maxMem   " ("   (maxMem/megs)   " MiB)");
        System.out.println ("Free Memory:  "   freeMem   " ("   (freeMem/megs)   " MiB)");
    }
}

Bu "Max Bellek" varsayılan yığın ayırma bağlı. rapor edecek Hala oynamak gerekiyor diye -Xmx ( ..Sıcak nokta). Windows 7 Enterprise 64-bit, benim üzerinde çalışan bulundu32-bitNoktasal JVM 1577MiB kadar ayrılamadı

[C:scratch]> java -Xmx1600M MaxMemory
Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.
[C:scratch]> java -Xmx1590M MaxMemory
Total Memory: 2031616 (1.9375 MiB)
Max Memory:   1654456320 (1577.8125 MiB)
Free Memory:  1840872 (1.75559234619 MiB)
[C:scratch]>

Bir oysa64-bitAynı işletim sistemi üzerinde JVM, tabii ki çok daha yüksek olduğunu (yaklaşık 3TiB)

[C:scratch]> java -Xmx3560G MaxMemory
Error occurred during initialization of VM
Could not reserve enough space for object heap
[C:scratch]> java -Xmx3550G MaxMemory
Total Memory: 94240768 (89.875 MiB)
Max Memory:   3388252028928 (3184151.84297 MiB)
Free Memory:  93747752 (89.4048233032 MiB)
[C:scratch]>

Diğerleri zaten belirttiğim gibi, bu işletim sistemi göre değişir.

  • 32-bit Windows için: olacak &; 2Windows internals book kullanıcı işlemleri için 2 GB diyor) lt
  • 32-bit BSD / Linux için: <3 GB (Şeytanın Kitabı)
  • 32-bit Mac OS X için: <4GB (Mac OS X internals kitaptan)
  • 32-bit Solaris hakkında emin değilim, yukarıdaki kodu deneyin ve bize bildirin.

Eğer JVM 32-bit ise 64-bit ana bilgisayar işletim sistemi için, hala gösterildiği gibi, yukarıdaki gibi, büyük olasılıkla değişir.

-- GÜNCELLEME 20110905Ben sadece bazı detayları/: başka gözlemler işaret etmek istedim

  • Bunu araştırdım ve donanımın gerçek 6 GB RAM takılı 64-bit. İşletim sistemi Windows 7 Enterprise, 64-bit oldu
  • Ayrılabilecek Runtime.MaxMemory gerçek miktarı da işletim sisteminin bağlıdırçalışma kümesi. Bir zamanlar ben de çalışan İsmen varken bu koştu ve ben buldukdeğilbaşarıyla -Xmx1590M ile Noktasal JVM başlamak ve daha küçük gitmek zorunda kaldı. Bu daha 1590M zamanda çalışma kümesi boyutu (hala Windows' tasarım) nedeniyle 32-bit için 2GiB altında olacak korumak rağmen . bağlı olarak ortaya çıkan da anlaşılacağı

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Andrey Menshikov

    Andrey Mensh

    28 Ocak 2012
  • krotoflik

    krotoflik

    26 ŞUBAT 2011
  • TheJoeycool2010

    TheJoeycool2

    12 Temmuz 2010