一、通过ulimit -a 命令可以查看当前的各种资源限制,比如ulimit -d 是 进程占用的最大数据段大小。
# ulimit -a
-t: time(cpu-seconds) unlimited
-f: file(blocks) unlimited
-c: coredump(blocks) 0
-d: data(KiB) unlimited
-s: stack(KiB) 8192
-l: lockedmem(KiB) 65536
-n: nofiles(descriptors) 32768
-p: processes 15543
-i: sigpending 15543
-q: msgqueue(bytes) 819200
-e: maxnice 40
-r: maxrtprio 0
-m: resident-set(KiB) unlimited
-v: address-space(KiB) unlimited
二、我这里使用ulimit -d 设置单个应用可以申请的内存,从运行的结果看如果设置的内存不够,程序不能运行,会提示Segmentation fault。
三、这篇文章介绍android 里面会对单个app可以申请的内存进行限制,通过build.prop里面参数可以修改,如果修改不对,系统是不能正常运行的。 Android 内存优化的总结方案
查看 Dalvik 堆信息
每一个手机厂商都可以设定设备中每一个进程能够使用的堆大小,有关进程堆大小的值有下面三个,假如我们 dalvik 堆相关的信息可以通过命令查看,比如下面这条命令。
adb shell getprop dalvik.vm.heapsize
1. 堆分配的初始值
dalvik.vm.heapstartsize 是堆分配的初始值大小,这个值越小,系统内存消耗越慢,但是当应用扩展这个堆,导致 GC 和堆调整时,应用会变慢。
这个值越大,应用越流畅,但是可运行的应用也会相对减少。
2. 单个应用可用最大内存
dalvik.vm.heapgrowthlimit 是单个应用可用最大内存,如果在清单文件中声明 largeHeap 为 true,则 App 使用的内存到 heapsize 才会 OOM,否则达到 heapgrowthlimit 就会 OOM。
3. 堆内存最大值
dalvik.vm.heapsize 是进程可用的堆内存最大值,一旦应用申请的内存超过这个值,就会 OOM。
四、参考文章:
Linux资源限制命令—ulimit_HHFQ的博客-CSDN博客