Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.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
如何为Android调试施加内存压力?_Android_Debugging_Memory - Fatal编程技术网

如何为Android调试施加内存压力?

如何为Android调试施加内存压力?,android,debugging,memory,Android,Debugging,Memory,我正在尝试处理我的Android应用程序遇到的一些问题,我认为这些问题与我在显式“前台”模式(Service.startForeground)下运行时的内存压力有关 为了调试它,我需要对我的应用程序施加内存压力,我可以通过各种方式来完成,比如启动其他各种应用程序,比如带有大量网页的Firefox。然而,这并不理想,因为它仍然相当耗时和不精确。所以我的问题是,有没有一种方法可以使用调试器(例如在Eclipse下)或者一个专门用于此目的的特殊应用程序来施加内存压力?我不想绕道自己写一个,显然,在我自

我正在尝试处理我的Android应用程序遇到的一些问题,我认为这些问题与我在显式“前台”模式(Service.startForeground)下运行时的内存压力有关

为了调试它,我需要对我的应用程序施加内存压力,我可以通过各种方式来完成,比如启动其他各种应用程序,比如带有大量网页的Firefox。然而,这并不理想,因为它仍然相当耗时和不精确。所以我的问题是,有没有一种方法可以使用调试器(例如在Eclipse下)或者一个专门用于此目的的特殊应用程序来施加内存压力?我不想绕道自己写一个,显然,在我自己的应用程序中分配内存是行不通的

更新:更改了“反映我需要设备上的实际内存压力,而不是模拟”的标题

编辑:(考虑克里斯托夫的评论)

你可以制造人工记忆压力。为此,请在MainActivity中创建一个按钮。然后,在按钮的
onClick
方法中,创建10000个对象(使用不同数量的对象进行实验)。然后,当你的应用程序运行时,多次点击该按钮,这会造成很大的内存压力

代码可能如下所示:

class MainActivity {
    ArrayList<String> stringArray = new ArrayList<>();

    ...

    public void click(View view) {
        // Add 10,000 String objects to Array List

        for (int i = 0; i < 10000; i++) {
        stringArray.add("A string");
        }
    }
}
class活动{
ArrayList stringArray=新的ArrayList();
...
公共作废单击(查看){
//将10000个字符串对象添加到数组列表
对于(int i=0;i<10000;i++){
添加(“字符串”);
}
}
}

假设您将按钮的
onClick
XML属性设置为
click

Read()或(),并将问题作为副本关闭。这些问题似乎与在模拟器中模拟内存不足有关。我没有使用emulator(因为我正在记录各种传感器,在这个阶段不适合进行仿真),我需要在实际设备上模拟实际的低内存。(也许simulate是个错误的词,我实际上需要创建一个低内存条件)。那么为什么不交叉编译一个消耗内存的小二进制文件呢?调用
malloc
然后进行某种循环的一种。我想我可能不得不这样做。我希望已经存在一些东西来节省一些时间。用java应用程序压缩内存不是没有意义吗?考虑到JVM沙箱和GC?本身,这与浏览器不太一样,因为Firefox绕过了堆大小的限制,并且会比单个应用程序对内存造成更大的压力。不过,这给了我一个想法……您需要分配更大的阵列来产生严重的内存压力。这种方法将为数组的每个字符串元素使用约44字节,或者每次按下按钮时使用约44 kB。在我的例子中,我需要创建一个长度为10^8的数组,以便在一次单击中生成一个
OutOfMemoryError
。这不是最糟糕的想法,但是,它不会以这种方式工作。您不保留对数组的任何引用,因此它将被垃圾收集。要实现此功能,请创建一个ArrayList列表;在你的活动中。有一个for循环,在每个循环中循环200次,将新字符串(100000)添加到列表中4-5次单击=200 MB=M7(HTC)上的OutOfMemory