Android与iOS的内存管理机制的区别,在网上看的一些文章说linux和unix...
文章目录:
一、Android与iOS的内存管理机制的区别,在网上看的一些文章说linux和unix...
Android清理内存时候,它不会直接关掉App,而是筛选出其中的一些无用对象,率先把它们关闭掉,从而释放部分内存。但只要你不手动关,这些后台程序都不会自动消失。所以就算你今天上午在微信和朋友聊天,晚上再从后台调出微信,画面也肯定还停留在那时候
iOS会无差别地关掉老应用,这意味着如果你正在玩一个大型游戏,那么可能微信、微博、QQ这些软件就全都被自动强行关掉了。你若想切换回这些软件,就要经历一个相当闹心的启动过程。
另外一个比较闹心的场景就是你在Safari浏览器里开了N个标签,1GB运存承受不住那么多的内容,于是非常自觉地把最老的几个网页给挂起了。如果那几个页面刚好是你填了一半的付款界面或者是写了一半的文章,那么就全没了
二、iOS的内存管理和虚拟内存机制具体是怎么运作的
简单来说,OS X 和 iOS 都有虚拟内存系统,但这里的虚拟内存和 Windows 中的虚拟内存是不一样的。
前者是指将物理内存地址,针对每个进程,映射到不同的虚拟内存地址上。于是在一个物理并不够大的设备上,32 位的进程也能使用 4 GB 的虚拟内存地址,64 位的进程能使用 18 EB 的虚拟内存地址。但在同一时间真正能使用内存量,仍然是设备的物理内存大小,虚拟内存并不会改变这个物理限制。它的作用就不详述了,感兴趣的可以去学计算机原理和操作系统,大概是大三的课程。
而后者指的是交换文件,即当进程使用的内存超过物理内存大小时,操作系统会将一部分暂时用不到的内存写入磁盘的交换文件,以腾出空间;当需要用到时,又会将交换文件中所需的部分读取到物理内存中。
OS X 是可以使用交换文件的,而 iOS 不行。
这是我在一台越狱的 iPhone 4 (iOS 6) 上执行的结果:
# sysctl vm.swapusagevm.swapusage: total = 0.00M used = 0.00M free = 0.00M
# topProcesses: 53 total, 2 running, 51 sleeping... 303 threads
Load Avg: 0.15, 0.15, 0.17 CPU usage: 20.39% user, 0.00% sys, 79.61% idle
SharedLibs: num = 0, resident = 0 code, 0 data, 0 linkedit.
MemRegions: num = 0, resident = 0 + 0 private, 0 shared.
PhysMem: 67M wired, 53M active, 21M inactive, 414M used, 91M free.
VM: 16G + 0 384212(0) pageins, 3575(0) pageouts
第 2 行表明 iOS 6 是没有使用交换文件的,最后一行表明目前所有进程的虚拟内存大小总量是 16 GB。
综上可以说明,iOS 系统是不使用交换文件的,也就谈不上对用户体验的作用。而虚拟内存只是操作系统管理内存的一种方式,也没有什么直接的影响(除了可以使用一些不连续的内存碎片等)。
最后我想说的是,苹果并没有什么黑科技能突破物理限制,至少从开放的源码中(Darwin)是看不出的。
iPhone 4S 相比 iPhone 4 多了一个核,所以在多线程下载时,对主线程的影响明显小了很多。
iPhone 5 相比 iPhone 4S 多了 512 MB 物理内存,所以在 iOS 7 上就流畅了很多。
更实际的体验是,iPhone 4 在使用 iOS 6 时,就已经很卡了,切应用时经常退出。
到此,以上就是小编对于ios 内存管理机制的问题就介绍到这了,希望介绍关于ios 内存管理机制的2点解答对大家有用。
Amysql_youhua_articlehuaunyuan($article);