2013-07-03 78 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