精华内容
下载资源
问答
  • Android 单个应用内存限制
    2021-06-10 13:38:58

    一、出现OutOfMemeryError的原因?

    Androd针对每个应用有内存限制

    二、获取Android手机应用内存大小 手机不同其性能也不同,手机本身内存可能有大有小,所以针对每个应用的内存大小也不相同。

    方法一:

    root@android:/ # adb shell getprop | grep dalvik.vm.heapgrowthlimit

    [dalvik.vm.heapgrowthlimit]: [96m]

    方法二:

    ActivityManager activityManager =(ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);

    activityManager.getMemoryClass();

    activityManager.getLargeMemoryClass();

    方法三:

    root@android:/ # adb shell cat /system/build.prop | grep heap

    dalvik.vm.heapsize=256m

    dalvik.vm.heapstartsize=8m

    dalvik.vm.heapgrowthlimit=96m

    dalvik.vm.heaptargetutilization=0.75

    dalvik.vm.heapminfree=2m

    dalvik.vm.heapmaxfree=8m

    方法四:

    Runtime.getRuntime().maxMemory()

    更多相关内容
  • 不同的手机可能会不同,主要是因为大部分手机都不是原生系统,手机厂商会根据自己的需求更改单个应用内存限制。就以我跟同事的手机为例:(单位:MB)酷派大神f1:256LG P970:48三星9250::96联想S720:64小米1:64...

    问题:android中单个应用能申请到的最大内存是多少?

    答案是:不确定。不同的手机可能会不同,主要是因为大部分手机都不是原生系统,手机厂商会根据自己的需求更改单个应用的内存限制。

    就以我跟同事的手机为例:(单位:MB)

    酷派大神f1:256

    LG P970:48

    三星9250::96

    联想S720:64

    小米1:64

    可以看到酷派简直丧心病狂的改成256M,妈妈再也不用怕我的手机会OOM了~~

    当然,这些只是系统的配置,真实的运行情况不一定符合,下面我们就来验证一下这个数字的真实性~~

    先写个demo测试了一遍。大致代码如下:

    public class MainActivity extends Activity implements Runnable {

    List bs = new ArrayList();

    TextView tv = null;

    String result = "";

    Handler handler = new Handler(){

    public void handleMessage(android.os.Message msg) {

    tv.setText(result);

    }

    };

    @Override

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    tv = new TextView(this);

    setContentView(tv);

    long max = Runtime.getRuntime().maxMemory()/1024/1024;

    result += "测试本机型单个应用所能申请到的最大内存:"+max+"M\n";

    tv.setText(result);

    new Thread(this).start();

    }

    @Override

    public void run() {

    int i = 0;

    Runtime rt = Runtime.getRuntime();

    while (i<100) {

    i++;

    long m1 = rt.totalMemory()-rt.freeMemory();

    Bitmap b = BitmapFactory.decodeResource(getResources(), R.drawable.first_z);

    bs.add(b);

    long m2 = rt.totalMemory()-rt.freeMemory();

    if (rt.maxMemory()-rt.totalMemory()<=m2-m1) {

    //当应用已申请的最大内存跟系统限制的最大内存相差 小于 加载一张1M图片所需要的内存,不继续加载了

    result += "一张1M的图片需要内存:"+(m2-m1)/1024/1024+"M\n";

    break;

    }

    }

    result += "加载1M的图片"+i+"张后内存已不足,再加载即发生OOM!";

    handler.sendEmptyMessage(0);

    }

    }

    (R.drawable.first_z是一张刚好1M的图片)

    不看代码也没事,我解释一下这个Activity做了什么事:在启动Activity后,开启了一个线程来加载100张1M的图片,并以强引用的形式存入List中,每加载一次图片就做个判断,如果当前应用所能申请到的内存已不够加载一张1M的图片了,则不再加载。

    运行的结果如下,数字表示该手机最多能加载1M的图片多少张:

    酷派大神f1:34

    LG P970:13

    三星9250::11

    联想S720:12

    看到这个数字大家可能就疑惑了,LG的内存限制明明才48M,为什么却比三星、联想加载的图片多?这是因为LG加载一张1M的图片仅需要4M内存,而酷派、三星加载一张1M的图片需要7M的内存。

    那么联想加载1M的图片需要多少内存呢?答案也是4M;那么就奇怪了,为什么同样是4M内存,加载的图片却比LG少呢?

    我也是觉得奇怪,于是查看了下log信息,如下:

    01-28 09:22:41.949: I/dalvikvm-heap(12228): Grow heap (frag case) to 11.208MB for 2073616-byte allocation

    ///从这里开始加载图片,多余的log我去掉了

    01-28 09:22:42.005: I/dalvikvm-heap(12228): Grow heap (frag case) to 15.210MB for 4196368-byte allocation

    01-28 09:22:42.224: I/dalvikvm-heap(12228): Grow heap (frag case) to 19.249MB for 4196368-byte allocation

    01-28 09:22:42.509: I/dalvikvm-heap(12228): Grow heap (frag case) to 23.271MB for 4196368-byte allocation

    01-28 09:22:42.699: I/dalvikvm-heap(12228): Grow heap (frag case) to 27.273MB for 4196368-byte allocation

    01-28 09:22:42.862: I/dalvikvm-heap(12228): Grow heap (frag case) to 31.275MB for 4196368-byte allocation

    01-28 09:22:43.011: I/dalvikvm-heap(12228): Grow heap (frag case) to 35.277MB for 4196368-byte allocation

    01-28 09:22:43.170: I/dalvikvm-heap(12228): Grow heap (frag case) to 39.280MB for 4196368-byte allocation

    01-28 09:22:43.317: I/dalvikvm-heap(12228): Grow heap (frag case) to 43.282MB for 4196368-byte allocation

    01-28 09:22:43.467: I/dalvikvm-heap(12228): Grow heap (frag case) to 47.284MB for 4196368-byte allocation

    01-28 09:22:43.625: I/dalvikvm-heap(12228): Grow heap (frag case) to 51.286MB for 4196368-byte allocation

    01-28 09:22:43.790: I/dalvikvm-heap(12228): Grow heap (frag case) to 55.288MB for 4196368-byte allocation

    01-28 09:22:43.940: I/dalvikvm-heap(12228): Grow heap (frag case) to 59.291MB for 4196368-byte allocation

    可以发现,在加载图片之前就已经用掉了11.208M,虽然不知道联想做了什么厉害的事情,不过在加载图片前就用掉11M简直丧心病狂!

    不过这样一来联想加载的图片比较少也可以理解了;因为我都是转换成MB单位的,所以可能有些误差,联想加载一张1M的图片的内存应该是要比LG多一点的。

    因为联想的这种特殊情况,所以我觉得其他手机应该也肯定也会在加载图片前耗掉一些内存,于是也拿来测一下:

    酷派大神:4

    LG:1.6

    三星:13

    联想:11

    可以看到,三星更加丧病~~而LG倒是只用了1.6M。

    验证:根据测试所得的数据,算出加载1M图片所消耗的内存,进行验证

    酷派大神f1:(256-4)/34=7.4

    LG P970:(48-1.6)/13=3.6

    三星9250::(96-13)/11=7.5

    联想S720:(64-11)/12=4.4

    从上述结果可以看出,1M图片消耗的内存与代码得到的基本符合(酷派、三星7M;LG、联想4M)。

    结论:好的,让我回到本次测试的目的;我们是为了验证不同手机单个应用最大内存限制的真实性而做的测试,而从结果来看,结论是成立的!不管手机厂商把内存限制改的多么浮夸,但其真实性是不可否认的~

    展开全文
  • 现在使用YARN,在同一台计算机上运行相同的应用程序时,出现了容器错误。默认情况下,我有以下设置:yarn.scheduler.minimum-allocation-mb1024yarn.scheduler.maximum-allocation-mb8192yarn...

    在Hadoop v1中,我为每个7个映射器和化简器插槽分配了1GB的大小,我的映射器和化简器运行良好。我的机器有8G内存,8个处理器。现在使用YARN,在同一台计算机上运行相同的应用程序时,出现了容器错误。默认情况下,我有以下设置:

    yarn.scheduler.minimum-allocation-mb

    1024

    yarn.scheduler.maximum-allocation-mb

    8192

    yarn.nodemanager.resource.memory-mb

    8192

    它给了我错误:

    Container [pid=28920,containerID=container_1389136889967_0001_01_000121] is running beyond virtual memory limits. Current usage: 1.2 GB of 1 GB physical memory used; 2.2 GB of 2.1 GB virtual memory used. Killing container.

    然后,我尝试在mapred-site.xml中设置内存限制:

    mapreduce.map.memory.mb

    4096

    mapreduce.reduce.memory.mb

    4096

    但仍然出现错误:

    Container [pid=26783,containerID=container_1389136889967_0009_01_000002] is running beyond physical memory limits. Current usage: 4.2 GB of 4 GB physical memory used; 5.2 GB of 8.4 GB virtual memory used. Killing container.

    我很困惑为什么map任务需要这么多的内存。据我了解,1GB的内存足以完成我的地图/缩小任务。为什么当我为容器分配更多内存时,任务使用了更多内存?是因为每个任务都会得到更多分割吗?我觉得稍微减少容器的大小并创建更多的容器会更有效,以便更多的任务并行运行。问题是如何确定每个容器分配的拆分数量是否超过其处理能力?

    展开全文
  • Android设备出厂以后,Java虚拟机对单个应用内存分配就固定下来了,超出这个值就会OOM。这个属性值定义在 /system/build.prop中(以我的Nexus7为例)。dalvik.vm.heapgrowthlimit=192m // heapgrowthlimit参数表示...

    Android设备出厂以后,Java虚拟机对单个应用的内存分配就固定下来了,超出这个值就会OOM。

    这个属性值定义在 /system/build.prop中(以我的Nexus7为例)。

    dalvik.vm.heapgrowthlimit=192m // heapgrowthlimit参数表示单个应用最大可用内存

    这表示单个应用最大可用内存是192m,超出就会报OOM。这个内存溢出是针对dalvik堆而言,而不是native堆。

    通过代码查看每个进程可用的最大内存,即heapgrowthlimit值:

    ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);

    int heapGrowthLimit = am.getMemoryClass(); // 192,以m为单位

    dalvik.vm.heapstartsize=16m // heapstartsize参数表示堆内存分配的初始大小

    堆内存分配的初始大小会影响整个系统对RAM的使用程度,和第一次使用应用的流畅速度。

    它值越小,系统ram消耗越慢,但一些较大的应用一开始不够用,需要调用gc和堆调整策略,导致应用反应较慢。

    它值越大,系统ram消耗越快,但是应用更流畅。

    dalvik.vm.heapsize=512m // heapsize参数表示单个进程可用的最大内存

    heapsize表示不受控情况下的极限堆,表示单个进程可用的最大内存。但如果存在heapgrowthsize参数,则以heapgrowthsize定义为最大内存。

    android上的应用是带有独立虚拟机的,也就是每开一个应用就会打开一个独立的虚拟机。这样设计的优点就是在单个程序崩溃的情况下不会导致整个系统的崩溃。

    一般地,厂家针对设备的配置情况都会适当的修改/system/build.prop文件来调高这个值。随着设备硬件性能的不断提升,从最早的16M限制(G1手机)到后来的24m,32m,64m等,都遵循Android框架对每个应用的最小内存大小限制。

    在应用开发中,如果要使用大堆,可在manifest文件中指定android:largeHeap为true,这样dalvik的堆内存可以达到heapsize。

    展开全文
  • Android 原生系统一般默认16M,但是国内手机一般都是特殊定制的,都有修改系统的内存大小,所有有时候,要查看具体应用系统分配的内存大小,还是需要实际去测试的, 测试方法如下: 方式一: ActivityManager ...
  • 最近在做虚拟化物理机迁移...原因:X86系统默认寻址能力的限制解决办法:安装具有PAE(物理寻址扩展)功能的内核1、命令行下运行内核安装命令yum -y install kernel-PAEyum -y install kernel-PAE-devel2、编辑启动配...
  • 如何设置Docker容器中Java应用内存限制关注:85答案:2mip版解决时间 2021-01-30 11:46提问者时光盗走我的心2021-01-30 07:00如何设置Docker容器中Java应用内存限制最佳答案二级知识专家寄出个心动2021-01-30 08:...
  • Say, "run myApp.jar with cpu=800 and memory=1024"Ive been doing java programming for many years and it is an embarrasment to ask this question. I don't even know whether this is possible or not....
  • 它允许您在受控制的情况下运行程序,并强制执行时间和内存限制,在违反这些参数时终止程序。无需安装,只需使用超时程序执行命令及其参数,它将监视命令的内存和时间消耗,如果超出限制则中断进程,并通过预定义...
  • Java内存分配限制

    2021-02-27 11:03:44
    然后这些线程运行并执行它们的操作。但是,我注意到,经过一定数量的线程后,我会发生奇怪的崩溃。我知道这是因为这些StringBuilder,因为当我减少它们的初始容量时,我可以启动更多的线程。现在,对于这些StringBuilder,...
  • 对pycharm 修改程序运行所需内存详解

    千次阅读 2020-12-02 14:08:32
    Djava.net.preferIPv4Stack=true -XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow -Xms 和 -Xmx是java 命令的一个选项,用来设置你的应用程序启动时的可用内存大小和运行时的可用的内存大小。 修改...
  • 查看单个应用程序最大内存限制的指令: adb shell getprop|grep heapgrowthlimit 应用启动后分配的初始内存: adb shell getprop|grep dalvik.vm.heapstartsize 单个 java 虚拟机最大的内存限制: adb shell ...
  • PHP取消内存限制

    2021-04-12 15:16:48
    运行PHP程序,通常会遇到“Fatal Error: Allowed memory size of xxxxxx bytes exhausted”的错误, 这个意味着PHP脚本使用了过多的内存,并超出了系统对其设置的允许最大内存。解决这个问题,首先需要查看你的程序...
  • 我有一个Java应用程序,该应用程序部署在两台计算机上,并根据指标(包括JMC)判断它们都几乎耗尽了内存,并且持续了很长时间.但是,这些应用程序可以正常运行,并且不会发生OutOfMemory错误.这很混乱.您能解释为什么应用...
  • Ubuntu解除内存限制

    千次阅读 2019-08-16 16:14:54
    如果已经解除内存限制应该输出下面内容 执行修改命令 gedit /etc/default/grub 修改为: GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1" 更新 update-grub 重启系统: reboot 重启...
  • timeout 脚本是一个有用的资源监视程序,用于限制Linux中进程的时间和内存消耗,它允许你控制程序运行,限制运行时间和内存限制,在超出参数设定时终止程序。要运行此脚本,您必须在Linux系统上安装Perl 5,并安装/...
  •  当将生产环境换为64bit后,系统内存的问题全部显现,内存耗尽、内存占用大,导致内存耗尽,吃掉交换分区内存,然后系统卡、卡、卡... ... 0x02 知识点  内存相关知识点参考...
  • 修改php内存限制

    2021-03-24 11:12:04
    昨天,在服务器端调试程序的时候,网站突然弹出Fatal Error: Allowed memory size...,当时一脸懵逼,但很快就恢复正常了,不仅勾起我的好奇心,百度了下原因,原来是单个脚本使用过多内存导致的。如下为转载的文章...
  • 如何防止Java超出容器内存限制

    千次阅读 2021-03-15 13:23:50
    当Java应用程序在容器内执行时,JVM人体工程学(负责根据主机的功能动态分配资源)不知道它是在容器内运行,它计算Java应用程序要使用的资源数量基于正在执行容器的主机.鉴于此,如果为容器设置限制并不重要,JVM将把主机...
  • 9月11日,《2020 年华为开发者大会》在东莞...鸿蒙系统已经有超过千万级应用支持HarmonyOS是正式开源的,开发人员将获得模拟器,SDK程序包和IDE工具。面向智能手机的HarmonyOS的Beta版将于2020年底面向中国开发人员...
  • docker限制容器内存

    2020-07-16 16:37:02
    但是在容器的使用过程中,经常需要对容器可以使用的主机资源进行限制,本文介绍如何限制容器可以使用的主机内存。 为什么要限制容器对内存的使用? 限制容器不能过多的使用主机的内存是非常重要的。对于 linux ...
  • pycharm 修改程序运行所需内存

    千次阅读 2018-04-20 16:33:00
    -Xms 和 -Xmx是java 命令的一个选项,用来设置你的应用程序启动时的可用内存大小和运行时的可用的内存大小。 修改 -Xms为 256m -Xmx为 1024m 修改后设置为: - server - Xms256m - Xmx1024m - XX :...
  • 就是在后端代码中涉及对内存消耗极大的计算,可能会达到几个G,然后应用运行的时候,运行到这个部分就崩溃了,我的计算机有32G内存,应该不是机器内存耗尽,那么是Django对可用内存限制吗?如果有的话如何放开...
  • android之内存限制小结

    2021-06-09 09:10:25
    就是android monitor中内存的大小是随着程序的运行一直在不断增加的: 可以看到在memory monitor中存在着free memory和alloc momory,随着程序的不断跳转执行,其大小在不断的增加,那么一个apk程序的内存大小限制是...
  • Linux如何限制用户的内存使用量

    千次阅读 2021-04-26 15:11:48
    (1)进入之后想要限制某个用户(arms)的内存使用量不超过10个G @adms hard rss 11000000 (2)进入之后想要限制全部用户的内存使用量不超过20个G *hard rss 21000000 注: (1)@adms 表示只对adms这个用户起作用 ...
  • 如果使用率百分比超过设置的限制,则可以在“设置”选项卡中修改CPU使用率的限制百分比和警报通知的频率。 默认情况下,打开应用程序时,它不会显示任何窗口。 而是在操作系统的托盘区域中打开了该应用程序。 要...
  • 一、问题场景在一个短信平台的项目中,设置了一个下发节点的Xmx为16G,但是...这代表着由于内存耗尽,导致cpu高负载,最终导致应用程序不能正常运行,断断续续。严重影响生产环境的运行速率。二、解决方案1、线上...
  • 修改java虚拟机启动内存大小

    千次阅读 2021-02-12 14:33:55
    运行java桌面应用程序的时候,有时候会因为jvm内存太小,从而内存溢出,程序崩溃。可是通过修改 eclipse.ini 中的参数,来实现修改jvm的内存大小。-vmargs-Xms128M-Xmx512M-XX:PermSize=64M-XX:MaxPermSize=128M...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 467,489
精华内容 186,995
关键字:

怎样更改应用限制运行内存