【发布时间】:2013-07-03 07:47:31
【问题描述】:
我最近一直在研究内存管理,我创建了一个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 由于内存不足而正在运行。我应该担心应用中的内存吗?
【问题讨论】:
-
这是一个真正的应用程序吗?对我来说看起来有点没用。
-
我刚刚创建了一个服务,从我的实际应用程序开始,监控应用程序的内存并查看内存的行为。
-
你有内存问题吗?为什么不使用 SDK 的内存分析工具?
-
我已经修复了我的记忆问题,是的,我已经使用 MAT 工具进行了分析。关于堆的增加,我的问题有点理论化,这是正常的事情,也许是不正常的..