2013-07-03 226 views
0

我一直在尋找到內存管理最近,我創建一個Service這樣的:內存管理

public class MemoryManagerService extends Service { 

    private boolean isRunning = true; 
    private Thread memoryThread; 

    @Override 
    public IBinder onBind(Intent intent) { 

     return null; 
    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 

     Log.v("MemoryThread: ", "Created"); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     super.onStartCommand(intent, flags, startId); 
     memoryThread = new Thread(new MemoryManagerThread()); 
     memoryThread.start(); 
     Log.v("MemoryThread: ", "Started"); 
     isRunning = true; 
     return START_STICKY; 
    } 


    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     //memoryThread.stop(); 
     Log.v("MemoryThread: ", "Stopped"); 
     isRunning = false; 
    } 

    private class MemoryManagerThread implements Runnable 
    { 
     public MemoryManagerThread() { 

     } 

     @Override 
     public void run() { 

      while(isRunning) { 
       try 
       { 
        Thread.sleep(5000); 
        Log.v("Allocated bytes", Long.toString(Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory())); 
       } 
       catch(Exception e) {} 
      } 
     } 
    } 
} 

這隻會輸出分配的內存每5秒。這項服務從我的主要activity開始。當然,應用程序將分配內存,但是擔心的是增加的內存。

我在LogCat中看到,每5秒鐘分配的字節增加80 bytes,這意味着16 bytes/sec。這裏的數字不是很大,但可能是應用程序「永遠」運行,或者直到GC開始。當應用程序啓動時,它會使用大約14 mb的內存。我還應該提到我幾乎沒有看到GC_CONCURRENCE,這意味着GC由於內存不足而正在運行。我應該擔心我的應用程序中的內存?

+0

這是一個真正的應用程序?對我來說看起來有點無用。 –

+0

我剛剛創建了一個服務,以從我的實際應用程序開始,監視應用程序的內存,並查看內存如何運行。 –

+0

你有沒有記憶問題?爲什麼不使用SDK的內存分析工具? –

回答

1

我敢打賭,如果你只睡3000線你會得到80字節每三秒。很多小東西都會在應用程序中分配內存,然後可以在某些(通常不合時宜的)點清理它們。

+0

所以沒有擔心,只要我沒有看到'GC 4%24 + 2ms'的東西? –

+0

是的。完全不用擔心。 – HalR