既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
***02、***LMK(Low Memory Killer)
在用户空间中指定了一组内存临界值,当其中的某个值与进程描述中的 oom_adj 值在同一范围时,该进程将被 Kill 掉。如果你的 APP 某个进程需要一直保存存活,你需要保持你的进程优先级足够高,并且占用比较小,因为 Low Memory Killer 在工作时,同一优先级的进程会先 kill 那个占用最大的。性能测试时主要关注待机时的内存是不是够小。
Low Memory Killer 的工作可能致系统变卡。为什么呢?因为它 kill 了一些进程,然而现在市面的很多 APP 为了保活都会自启,刚刚被 kill,立刻又起来。启动占用大量内存(还有 CPU),又触发 Low Memory Killer。频繁的被 kill 和启动形成了恶性循环,so…系统变的很卡。
现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036【暗号:csdn999】
***03、***OOM 与 LMK 关系
Google 为什么设定当 Java 进程申请的 Java 空间超过阈值时,就抛出 OOM 异常?
- 为了让 Android 系统能同时让比较多的进程常驻内存,这样程序启动时就不用每次都重新加载到内存,能够给用户更快的响应。
- 程序发生 OOM 并不表示 RAM 不足,而是因为程序申请的 Java heap 对象超过了虚拟机配置的 heapgrowthlimit。也就是说,在 RAM 充足的情况下,也可能发生 OOM。
如果 RAM 真的不足,会发生什么呢?
- 这时 Android 的 memory killer(LMK)会起作用,当 RAM 所剩不多时,memory killer 会杀死一些优先级比较低的进程来释放物理内存,让高优先级程序得到更多的内存。
ps:可以通过 adb shell cat /proc/meminfo 查看 RAM 的使用情况。
***04、***绕过 dalvikvm heapsize 的限制
对于一些大型的应用程序(比如游戏),内存使用会比较多,很容易超出虚拟机 heapsize 的限制,这时怎么保证程序不会因为 OOM 而崩溃呢?
- 创建子进程
创建一个新的进程,那么我们就可以把一些对象分配到新进程的 heap 上了,从而达到一个应用程序使用更多的内存的目的,当然,创建子进程会增加系统开销,而且并不是所有应用程序都适合这样做,视需求而定。 - 使用 jni 在 native heap 上申请空间
native heap 的增长并不受 dalvik vm heapsize 的限制,只要 RAM 有剩余空间,程序员可以一直在 native heap 上申请空间,当然如果 RAM 快耗尽,LMK 会杀进程释放 RAM。大家使用一些软件时,有时候会闪退,就可能是软件在 native 层申请了比较多的内存导致的。
最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走!
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
项目、大纲路线、讲解视频,并且后续会持续更新**