我的测试代码中是android内存不足还是有问题

我的测试代码中是android内存不足还是有问题,android,memory-leaks,Android,Memory Leaks,我有一个空的活动。此活动有一个简单的hello world。在eclipse中使用新的| Android应用程序创建。 我观察到的是,如果我转储这个应用程序的dalvik私有内存,每次重新加载活动(方向改变)时,我都会看到这个进程的dalvik私有内存增加。下面是日志。这是正确的观察结果吗?请让我知道 06-06 15:38:38.139: D/hworld(5477): DalvikPM1956 06-06 15:38:41.599: D/hworld(5477): DalvikPM2120

我有一个空的活动。此活动有一个简单的hello world。在eclipse中使用新的| Android应用程序创建。 我观察到的是,如果我转储这个应用程序的dalvik私有内存,每次重新加载活动(方向改变)时,我都会看到这个进程的dalvik私有内存增加。下面是日志。这是正确的观察结果吗?请让我知道

06-06 15:38:38.139: D/hworld(5477): DalvikPM1956
06-06 15:38:41.599: D/hworld(5477): DalvikPM2120
06-06 15:38:43.989: D/hworld(5477): DalvikPM2240
06-06 15:38:45.959: D/hworld(5477): DalvikPM2364
06-06 15:38:47.769: D/hworld(5477): DalvikPM2488
06-06 15:38:49.999: D/hworld(5477): DalvikPM2612
06-06 15:38:51.989: D/hworld(5477): DalvikPM2736
06-06 15:38:54.019: D/hworld(5477): DalvikPM2852
06-06 15:38:55.789: D/hworld(5477): DalvikPM2976
06-06 15:38:57.779: D/hworld(5477): DalvikPM3088
06-06 15:39:04.389: D/hworld(5477): DalvikPM3236
06-06 15:39:09.389: D/hworld(5477): DalvikPM3364
06-06 15:39:10.389: D/hworld(5477): DalvikPM3484
06-06 15:39:11.789: D/hworld(5477): DalvikPM3604
代码

package com.ahw.android\u hello\u world;
导入java.util.Iterator;
导入java.util.List;
导入android.os.Bundle;
导入android.app.Activity;
导入android.app.ActivityManager;
导入android.app.ActivityManager.RunningAppProcessInfo;
导入android.content.Context;
导入android.util.Log;
导入android.view.Menu;
公共类MainActivity扩展了活动{
受保护迭代器i;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Context=getApplicationContext();
ActivityManager=(ActivityManager)getSystemService(Context.ACTIVITY_服务);
List=manager.getRunningAppProcesses();
for(i=list.iterator();i.hasNext();)
{
RunningAppProcessInfo p=(RunningAppProcessInfo)i.next();
if(p.processName.compareTo(“com.ahw.android\u hello\u world”)==0){
int[]pids=新的int[1];
pids[0]=p.pid;
ActivityManager ActivityManager=(ActivityManager)
getSystemService(Context.ACTIVITY\u服务);
android.os.Debug.MemoryInfo[]MI=activityManager.getProcessMemoryInfo(pids);
Log.d(“hworld”、“DalvikPM”+MI[0].dalvikPrivateDirty);
打破
}
}
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(R.menu.main,menu);
返回true;
}
}

更新::: 我有点好奇,看了看高级任务管理器我的应用程序内存使用情况,它是令人震惊的6.8MB,它达到了8MB甚至更多,只要改变方向。
8mb的hello world究竟是什么?在移动设备上?

如果更改设备的方向,活动将重新加载,因此它将调用onCreate方法。其他进程没有被释放,因此每次调用onCreate时,都会执行一个新进程,这会增加内存。

是的。但是为什么进程的总体内存应该增加呢?因为其他进程没有被释放,而您正在查看您的活动进程。您明白我的意思吗?没有tato469。但我碰巧按下了home按钮启动不同的应用程序,然后又回到我的应用程序。内存一直在增加…因为这个过程并没有用home按钮结束,它仍然在后台。每个应用程序都有一定的内存,它可以自己使用。如果还有足够的空间,Java/Android垃圾收集基本上不需要清理,这样每次重新创建活动时所使用的内存都会增加。是吗。但这将导致内部分裂。如果系统中有10个进程没有消耗它们的配额,并且gc没有被调用,那么一个新进程必须饿死或启动一个进程,如果内部碎片得到处理,那么可能不需要这些进程。。。
package com.ahw.android_hello_world;

import java.util.Iterator;
import java.util.List;

import android.os.Bundle;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningAppProcessInfo;
import android.content.Context;
import android.util.Log;
import android.view.Menu;

public class MainActivity extends Activity {
    protected Iterator i;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Context context = getApplicationContext();
        ActivityManager manager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
         List<RunningAppProcessInfo> list= manager.getRunningAppProcesses();

     for(i = list.iterator(); i.hasNext(); )
        {
            RunningAppProcessInfo p = (RunningAppProcessInfo)i.next();
            if(p.processName.compareTo("com.ahw.android_hello_world")==0){

                int[] pids = new int[1];
                pids[0] = p.pid;
                ActivityManager activityManager = (ActivityManager)
                        getSystemService(Context.ACTIVITY_SERVICE);

                android.os.Debug.MemoryInfo[] MI = activityManager.getProcessMemoryInfo(pids);

                Log.d("hworld","DalvikPM" + MI[0].dalvikPrivateDirty);
                break;

            }
        }
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}