Aşağıda, ne kadar bellek kaldığını kontrol etme formülü (geçerli yığında ne kadar bellek kaldığını değil, uygulama çökmeden önce ne kadar bellek kullanılabileceğini değil). Bunun doğru olduğundan emin değilim, değil mi?Android: ne kadar bellek kaldığını kontrol etmek nasıl?
double max = Runtime.getRuntime().maxMemory(); //the maximum memory the app can use
double heapSize = Runtime.getRuntime().totalMemory(); //current heap size
double heapRemaining = Runtime.getRuntime().freeMemory(); //amount available in heap
double nativeUsage = Debug.getNativeHeapAllocatedSize(); //is this right? I only want to account for native memory that my app is being "charged" for. Is this the proper way to account for that?
//heapSize - heapRemaining = heapUsed + nativeUsage = totalUsage
double remaining = max - (heapSize - heapRemaininng + nativeUsage);
Bir şeyi yanlış anlamış mıyım? Neden getNativeHeapFreeSize() 'http://goo.gl/wsBKT istediğini değil? – Pacerier
maxMemory() ve heapSize() arasındaki fark, büyük bir bitişik ayırma için oldukça emin olabileceğiniz bellek miktarıdır. FreeMemory() ile gösterilen ek miktar, mevcut yığının içindeki şu anda ayrılmamış miktardır, yani bu miktarın bir kısmının muhtemelen parçalanmış olduğu, miktarının gerektiğinde yığının büyütülmesi için kullanılan artışa bağlı olduğu anlamına gelir. Bu artışın çoğu zaten kullanılmış ve geri döndü. Bu nedenle, yukarıdaki "kalan" numaranızı kullanmak, bitişik bir yığınta ek belleğe ihtiyacınız varsa riskli olabilir. – Carl
Ne kadar belleğin olduğunu görmek, çeşitli maxMemory() değerleri için geliştirme sırasında bazı aşırı kullanım durumlarını test etmek ve uygulamanızın bunlarla başa çıkabildiğinden emin olmak için daha iyi bir yaklaşım olabileceğini görmek için dinamik olarak test yapmak yerine bunu eklemekteyim. Çünkü belli bir noktada bellek sınırlarınıza yaklaştığınızı fark ederseniz, yaptığınız her şeyden ötürü kullanıcı için kaba olmayan bir şekilde dışarı çıkmak zor olabilir. – Carl