1. 查看系统对进程的线程数限制总数
cat /proc/sys/kernel/threads-max
image.png不同机型限制总数不同
2. 查看当前进程运行的线程数
cat proc/{pid}/status
其中pid可以这样查找:
image.png image.png
不同机型限制总数不同
3. 获取内存相关
单个应用可用最大内存
dalvik.vm.heapgrowthlimit=64m ,它表示单个进程内存被限定在64m,即程序运行过程中实际只能使用64m内存,超出就会报OOM。(仅仅针对dalvik堆,不包括native堆)
$adb shell getprop dalvik.vm.heapgrowthlimit
256m
单个进程可用的最大内存
dalvik.vm.heapsize=512m ,但如果存在heapgrowthlimit参数,则以heapgrowthlimit为准.
$adb shell getprop dalvik.vm.heapsize
512m
应用启动后分配的初始内存
$adb shell getprop dalvik.vm.heapstartsize
8m
通过代码查看每个进程可用的最大内存,即heapgrowthlimit值:
ActivityManager.getMemoryClass(): 虚拟机java堆大小的上限,分配对象时突破这个大小就会OOM
ActivityManager.getLargeMemoryClass():manifest中设置largeheap=true时虚拟机java堆的上限
Runtime.getRuntime().maxMemory() : 当前虚拟机实例的内存使用上限,为上述两者之一
Runtime.getRuntime().totalMemory() : 当前已经申请的内存,包括已经使用的和还没有使用的
Runtime.getRuntime().freeMemory() : 上一条中已经申请但是尚未使用的那部分。那么已经申请并且正在使用的部分used=totalMemory() - freeMemory()
ActivityManager.MemoryInfo.totalMem: 设备总内存
ActivityManager.MemoryInfo.availMem: 设备当前可用内存
/proc/meminfo 记录设备的内存信息
网友评论