SORU
13 ŞUBAT 2012, PAZARTESİ


'bir bellek yetersiz atmak yok OutOfMemoryError ne olur?

Her nesne yığın bellek gerektiren farkındayım ve her ilkel/referans yığın yığın bellek gerektirir.

Yığında bir nesne oluşturmak için çalışacağız ve bunu yapmak için yeterli bellek yok olduğunda, JVM yığın java.lang.OutOfMemoryError oluşturur ve bana atar.

Yani dolaylı olarak, bu bellek başlangıçta JVM tarafından ayrılmış olduğu anlamına gelir.

Ne olur bu ayrılmış bellek kullanılmış olacağını kesinlikle kullanılabilir, okuma tartışma aşağıda) ve JVM değil yeterli bellek yığını bir kopyasını oluşturmak için java.lang.OutOfMemoryError?

Sadece takılmak mı? Ya o new OOM örneğine bellek yok beri bana null atmak istiyorsunuz ?

try {
    Object o = new Object();
    // and operations which require memory (well.. that's like everything)
} catch (java.lang.OutOfMemoryError e) {
    // JVM had insufficient memory to create an instance of java.lang.OutOfMemoryError to throw to us
    // what next? hangs here, stuck forever?
    // or would the machine decide to throw us a "null" ? (since it doesn't have memory to throw us anything more useful than a null)
    e.printStackTrace(); // e.printStackTrace() requires memory too.. =X
}

==

Neden JVM yeterli bellek rezerv olamaz mı?

Ne kadar ayrılmış olursa olsun, eğer hafızam JVM bellek": o . geri kazanmak için bir yol var mı yoksa kullanmak için hala mümkündür

try {
    Object o = new Object();
} catch (java.lang.OutOfMemoryError e) {
    // JVM had 100 units of "spare memory". 1 is used to create this OOM.
    try {
        e.printStackTrace();
    } catch (java.lang.OutOfMemoryError e2) {
        // JVM had 99 units of "spare memory". 1 is used to create this OOM.
        try {
            e.printStackTrace();
        } catch (java.lang.OutOfMemoryError e3) {
            // JVM had 98 units of "spare memory". 1 is used to create this OOM.
            try {
                e.printStackTrace();
            } catch (java.lang.OutOfMemoryError e4) {
                // JVM had 97 units of "spare memory". 1 is used to create this OOM.
                try {
                    e.printStackTrace();
                } catch (java.lang.OutOfMemoryError e5) {
                    // JVM had 96 units of "spare memory". 1 is used to create this OOM.
                    try {
                        e.printStackTrace();
                    } catch (java.lang.OutOfMemoryError e6) {
                        // JVM had 95 units of "spare memory". 1 is used to create this OOM.
                        e.printStackTrace();
                        //........the JVM can't have infinite reserved memory, he's going to run out in the end
                    }
                }
            }
        }
    }
}

Ya da daha kısaca:

private void OnOOM(java.lang.OutOfMemoryError e) {
    try {
        e.printStackTrace();
    } catch (java.lang.OutOfMemoryError e2) {
        OnOOM(e2);
    }
}

CEVAP
13 ŞUBAT 2012, PAZARTESİ


JVM hiç bellek çalışır. Bellek öbek hesaplama önceden yığın yapar.

** 14, bölüm 3.5.2 devletler:

  • Java sanal makinesi yığınlarının dinamik olarak genişletilebilir ve genişleme denenir ama yetersiz bellek yapılabilir etkisi genişleme, ya da yetersiz bellek yapılabilir ilk Java sanal makine oluşturmak için kullanılabilir yeni bir yığın iplik, Java sanal makinesi OutOfMemoryError Bir atar.

İçinYığın, 3.5.3 bölüm.

  • Eğer bir hesaplama otomatik depolama yönetim sistemi, Java sanal makine tarafından kullanılabilir daha fazla yığın gerektiriyorsa OutOfMemoryError atar.

Yani, nesne ayırma yapmadan önce önceden bir hesaplama yapar.


Ne JVM bellek Kalıcı Nesil bölge denilen (veya) PermSpace bir nesne için bellek ayırmaya çalışır. Eğer ayırma başarısız olursa JVM Çöp Toplayıcı Dene ve boş alan ayırmak için çağırır sonra bile, OutOfMemoryError atar. Hatta özel durumlar hata süresiz atılır, böylece bellek alanı gerektirir.

Further reading.? Ayrıca, OutOfMemoryError farklı JVM structure. oluşabilir

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • bethliebert

    bethliebert

    23 EKİM 2008
  • DavidParody

    DavidParody

    17 EKİM 2009
  • foreignimage

    foreignimage

    13 HAZİRAN 2006