Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取Android中使用应用程序的总RAM大小_Java_Android_Memory_Memory Management_Ram - Fatal编程技术网

Java 获取Android中使用应用程序的总RAM大小

Java 获取Android中使用应用程序的总RAM大小,java,android,memory,memory-management,ram,Java,Android,Memory,Memory Management,Ram,我想从Android手机中收集收集一些统计信息 当我启动应用程序时,我想了解以下信息: 应用程序使用多少RAM。 我的手机有多少可用内存。 我的手机总共有多少内存。 我必须做些什么来收集统计数据,也许写一些代码,或者 您使用一些提供此类信息或其他信息的应用程序 其他的我用垫子,但它对我没有帮助,也许我错过了什么 我想收集这些统计数据的主要原因是我可能会申请 为了释放更多空间,如果可以的话,开始关闭其他应用程序 收集这些信息,我会了解一切 编辑 例如,我的应用程序使用库(helper.jar

我想从Android手机中收集收集一些统计信息

当我启动应用程序时,我想了解以下信息:

  • 应用程序使用多少RAM。
  • 我的手机有多少可用内存。
  • 我的手机总共有多少内存。
我必须做些什么来收集统计数据,也许写一些代码,或者 您使用一些提供此类信息或其他信息的应用程序 其他的我用垫子,但它对我没有帮助,也许我错过了什么

我想收集这些统计数据的主要原因是我可能会申请 为了释放更多空间,如果可以的话,开始关闭其他应用程序 收集这些信息,我会了解一切


编辑 例如,我的应用程序使用库(helper.jar)的大小是85 MB,我知道如果应用程序使用.jar,它会加载到手机的RAM中,现在我可以看到我的RAM从2增加到2+85(大小为.jar)

如果我键入adb shell cat/proc/meminfo
这个来自adb的命令,我将看到一些关于内存的信息

如何从JAVA代码中执行相同的操作?



最好的问候,维托兄弟。

如果您想知道应用程序可以使用多少RAM,请查看

应用程序可以拥有的内存有这样的限制,因此应用程序无法从其他应用程序窃取所有内存。基本上,你的应用程序不能杀死其他应用程序。至少只要你不在应用程序中使用“大堆大小”选项

每个应用程序的限制类似于16(在G1上)到48 MB。这在很大程度上取决于你的设备的总RAM,你的应用程序可以有多少内存。例如,48MB适用于1GB RAM

获取应用程序当前内存使用情况的方法是查看logcat。它会这样说

GC_CONCURRENT freed 1109K, 12% free 10115K/11463K, paused 5ms+2ms

这意味着你的程序需要11MB的内存。

试试这个。它会根据需要为你提供与应用程序相关的内存信息和总内存

私有void getProcessInfo(){ PackageManager pm=this.getPackageManager()

MemoryInfo MemoryInfo=new ActivityManager.MemoryInfo();
activityManager.getMemoryInfo(memoryInfo);
列出runningAppProcesses=activityManager.getRunningAppProcesses();
Map pidMap=newtreemap();
对于(RunningAppProcessInfo RunningAppProcessInfo:RunningAppProcesss)
{
put(runningAppProcessInfo.pid,runningAppProcessInfo.processName);
}
集合键=pidMap.keySet();
for(int键:键)
{
ModelProcessInfo项=新的ModelProcessInfo();
int-pids[]=新int[1];
pids[0]=键;
android.os.Debug.MemoryInfo[]memoryInfoArray=activityManager.getProcessMemoryInfo(pids);
for(android.os.Debug.MemoryInfo-pidMemoryInfo:MemoryInfo-Array)
{
Log.i(TAG,String.format(“**MEMINFO在pid%d[%s]**\n”、pids[0]、pidMap.get(pids[0]));
Log.i(标记“pidMemoryInfo.getTotalPrivateDirty(%d):”+pidMemoryInfo.getTotalPrivateDirty()+“\n”);
Log.i(标记“pidMemoryInfo.getTotalPss():”+pidMemoryInfo.getTotalPss()+“\n”);
Log.i(标记,“pidmoryInfo.getTotalSharedDirty():”+pidMemoryInfo.getTotalSharedDirty()+“\n”);
//pss->进程使用的RAM
}
//activityManager.killbackgroundprocesss(pidMap.get(pids[0]);
}
}

可能重复的@AVD我已经阅读了您选择为重复的帖子,我找不到关于我问题的答案!我已经读了很多文章,并在互联网上寻找答案,但我仍然找不到。所以,如果你能请求帮助!请看一看SO thread和一个blog-,@AVD我不想知道堆大小,我想知道我的应用程序使用了多少RAM。我使用Nexus S,它有320MB的RAM,我可以看到吗?正如我说的:使用getMemoryClass()。它返回一个整数,说明应用程序可以有多少MB。因此,它将返回一个介于16和48之间的值。但是,如果我的手机有320MB的ram,那么为什么它使用16到48之间的格式?还有一个关于Android内存管理的Google I/O讨论:。这里已经解释过了,它只能使用很少的内存,这样Android和其他应用程序就不会因为你的应用程序消耗了所有内存而耗尽内存。
    MemoryInfo memoryInfo = new ActivityManager.MemoryInfo();
        activityManager.getMemoryInfo(memoryInfo);


    List<RunningAppProcessInfo> runningAppProcesses = activityManager.getRunningAppProcesses();



    Map<Integer, String> pidMap = new TreeMap<Integer, String>();
    for (RunningAppProcessInfo runningAppProcessInfo : runningAppProcesses)
    {

        pidMap.put(runningAppProcessInfo.pid, runningAppProcessInfo.processName);

    }

    Collection<Integer> keys = pidMap.keySet();

    for(int key : keys)
    {

        ModelProcessInfo item=new ModelProcessInfo();
        int pids[] = new int[1];
        pids[0] = key;
        android.os.Debug.MemoryInfo[] memoryInfoArray = activityManager.getProcessMemoryInfo(pids);
        for(android.os.Debug.MemoryInfo pidMemoryInfo: memoryInfoArray)
        {


           Log.i(TAG, String.format("** MEMINFO in pid %d [%s] **\n",pids[0],pidMap.get(pids[0])));
           Log.i(TAG, " pidMemoryInfo.getTotalPrivateDirty(%d): " + pidMemoryInfo.getTotalPrivateDirty() + "\n");
            Log.i(TAG, " pidMemoryInfo.getTotalPss(): " + pidMemoryInfo.getTotalPss() + "\n");
           Log.i(TAG, " pidMemoryInfo.getTotalSharedDirty(): " + pidMemoryInfo.getTotalSharedDirty() + "\n");
            //pss->RAM used by your process

        }
       // activityManager.killBackgroundProcesses(pidMap.get(pids[0]));

    }

}