热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

安卓手机内置储存建立swap虚拟内存

讨论这个问题之前,不得不吐槽一下CSDN博客的文章编辑功能简直弱爆了!!就不能升级一下么。。关于安卓手机的虚拟内存设置问题,
       讨论这个问题之前,不得不吐槽一下CSDN博客的文章编辑功能简直弱爆了!!就不能升级一下么。。

       关于安卓手机的虚拟内存设置问题,现如今的新机内存过剩,已经完全不用考虑这个问题了,本文的主要对象还是老机子、山寨机或者国产小内存机型。由于这类机型RAM较小(通常在256M以下),且经系统占用后剩余不过50M左右的运行空间,可谓是捉襟见肘,更不用说现在的APP都是吃RAM老虎,如此一来,通过设置虚拟内存来提高运行速度与运行成功率的需求就产生了。

       本文介绍3种设置虚拟内存的方法,在安卓系统上亲测成功,特别是在山寨机(无牌;测试发现S-ON,未OFF;通过ADB才能进fastboot;系统:android 2.3.6;内置储存空间(ROM):180;RAM:198M;系统占用后剩余RAM:50M)的测试上也成功,说明了该方法的通用性。

       注明:所有方法均需要ROOT,所有涉及到的APP也都要赋ROOT权限。(山寨机找不到专用ROOT的可以通过360手机助手或其它软件的通用ROOT)

       方法一:虚拟内存(1.0)(下载地址)
       该方法最简单,效果也相对较差,不能开机自启,适合不想折腾的用户。
       原理是在SD卡中创建swap文件,用于缓存交换。所以受限于SD卡速度,但对SD卡伤害其实不大(网上其它贴最喜欢说这样很烧SD卡,其实并没有想象中可怕)。
       操作十分简单,按照APP提示两键搞掂。问题也明显,除了不能开机自启比较麻烦,另外,如果设置的虚拟内存值太小,会导致虚拟内存被填满后系统死机。


       方法二:Swapper2。
       这是网上最流行的方法,与方法一不同的是,Swapper2可以通过在SD卡上建立SWAP分区(linux的一种分区格式)的方式使用虚拟内存,效率会比单纯在SD上建立SWAP文件高,BUG较方法一少,但是分区步骤繁琐,不易成功。


       既然说了这个APP,就有必要顺带提一下在安卓市场可以下载到的另一个虚拟内存APP:虚拟内存(VMHEAP)2.2(下载地址),这个APP需要S-OFF,原理与Swapper2一样,不方便、不解释、不多说。


       方法三:在手机内置储存空间中建立swap文件。
       该方法的优点显而易见,建立在内置储存中就是快!但是受限于旧手机的内置储存剩余空间本来就小,所以swap文件一般只能设置30-40M左右,效果一般,但是比没有好。


      需要工具:1、swap脚本;2、RE管理器(2.3.6可用);3、超级终端(也可以联机用ADB代替);4、busybox(建议山寨机用户先装busybox)工具集下载地址


操作方法:

        1、安装busybox,安装apk后还要点击APP图标运行安装一次;


2、设置虚拟内存开机自启:

(说明:如果不想开机启动则可以跳过这步,将这个步骤提前是因为老机子建立虚拟内存文件后可能内置空间已经不足,此时安卓系统会阻止任何APP安装进内置空间,因此会影响autostart.apk的安装。)

(说明2:如果系统已经提示“空间不足”,可以通过安卓超级终端的命令安装,需要先用RE将autostart.apk拷贝到系统根目录下。)

超级终端中安装apk的命令如下:

$ su //获取su权限
# cp autostart.apk /data/app //安装根目录下的autostart.apk



正常设置虚拟内存开机自启步骤:

        安装autostart.apk至手机内存(下次开机时赋ROOT权限,要注意及时点击“允许”,否则就再重启一次)。用RE管理器在手机/DATA目录下创建opt文件夹,将autostart.sh复制进去,并增加可读+可执行的权限。

autostart.sh的脚本如下:

losetup /dev/block/loop7 /data/swapfile.img; //虚拟循环设备为区块设备
mkswap /dev/block/loop7; //设置swap交换区
swapon /dev/block/loop7; //开启交换区




注:本文与网上其它相同原理教程最大不同之处就在于autostart.apk的代码,省略了没有用、而且会导致开机自启不稳定的一段代码(mount -o remount,rw /data;)即重新映射/data为可读写目录的代码。



       2、用RE管理器将swap建立脚本:buildswap.sh拷贝到手机内置/SYSTEM目录下,并用RE增加这个文件的“可执行”权限;


       3、在RE中执行buildswap.sh,用于在手机内置/DATA中映射一个可读写目录,并建立swap虚拟内存镜像文件swapfile.img;

buildswap.sh的脚本如下:

mount -o remount,rw /data;//映射可读写目录
swapoff /dev/block/loop7;//关闭系统交换分区
dd if=/dev/zero of=/data/swapfile.img bs=1024 count=32768;//拷贝一个块文件生成虚拟内存文件,目标是swapfile.img,设置一次读入/输出块大小为1024kb,设置总大小为32768kb(可以随时更改,更改后重新执行即可。如改为48M,即是:48*1024=49152,count=49152)
free;//显示当前系统内存使用情况


 4、此时如果要开启虚拟内存测试效果,可以直接执行autostart.sh,不影响开机自启。

5、想查看效果可以运行超级终端,输入free回车(查看内存使用情况),如swap一栏不全为0,则说明虚拟内存设置成功。如果全为0,则重新执行步骤3-4。若依旧为0则可能手机ROM不支持虚拟内存(从目前的测试看,尚未遇到这种情况)。

$ free//查看内存使用情况



6、重启手机(记得开机时给autostart.apk赋ROOT权限)后执行步骤5,检查是否设置成功。(方法一中的虚拟内存APP也可以代替超级终端free命令,作为查看手机当前SWAP状态的工具使用)[END]


综合三种方法:方法一简单,速度虽然不佳,但不受内置空间限制,可以最大设置到256M,持久性好;方法二繁琐,不推荐,只作为一种不同的技术在本文中说明;方法三简单易行,速度快,唯一的缺点是虚拟内存大小受限于本身就是宽裕的老手机内置储存空间,虚拟内存效果会伴随开机时间而变差,达不到非常好的效果。





======================================================我是分隔线=================================================================


      经过一段时间的测试,更新一下本文的结论:

方法一最大的不便就是开机不能自启,太麻烦,依然不推荐;

方法二(Swapper2),关键在于在SD卡中格式化出一个Linux swap分区,如果想要把APP都装进SD卡,也可以再格一个EXT3分区,则装APP的时候需要使用SD LINK这个软件。(APP装在EXT3分区中并没有速度上的明显提升)

方法二可以实现自启,效果和方法一一致,唯一的问题是长时间使用(中间不重启手机)后,驻swap分区中的APP会出现异常,需求手动重启手机或APP。

方法三受限于机身内置空间太小,发挥不出应有的效果,反而达不到最初的需求,经过测试,最终不推荐该方法,推荐方法二。





推荐阅读
  • 深入解析零拷贝技术(Zerocopy)及其应用优势
    零拷贝技术(Zero-copy)是Netty框架中的一个关键特性,其核心在于减少数据在操作系统内核与用户空间之间的传输次数。通过避免不必要的内存复制操作,零拷贝显著提高了数据传输的效率和性能。本文将深入探讨零拷贝的工作原理及其在实际应用中的优势,包括降低CPU负载、减少内存带宽消耗以及提高系统吞吐量等方面。 ... [详细]
  • 在《Linux高性能服务器编程》一书中,第3.2节深入探讨了TCP报头的结构与功能。TCP报头是每个TCP数据段中不可或缺的部分,它不仅包含了源端口和目的端口的信息,还负责管理TCP连接的状态和控制。本节内容详尽地解析了TCP报头的各项字段及其作用,为读者提供了深入理解TCP协议的基础。 ... [详细]
  • Parallels Desktop for Mac 是一款功能强大的虚拟化软件,能够在不重启的情况下实现在同一台电脑上无缝切换和使用 Windows 和 macOS 系统中的各种应用程序。该软件不仅提供了高效稳定的性能,还支持多种高级功能,如拖放文件、共享剪贴板等,极大地提升了用户的生产力和使用体验。 ... [详细]
  • 当程序首次启动时,由于代码尚未加载到内存中,会触发大量的页面错误,从而需要从磁盘读取代码。那么,当程序终止后,这些二进制文件是否会继续驻留在内存中呢?本文将探讨程序退出后的内存状态及其对系统性能的影响。 ... [详细]
  • 在Ubuntu系统中安装Android SDK的详细步骤及解决“Failed to fetch URL https://dlssl.google.com/”错误的方法
    在Ubuntu 11.10 x64系统中安装Android SDK的详细步骤,包括配置环境变量和解决“Failed to fetch URL https://dlssl.google.com/”错误的方法。本文详细介绍了如何在该系统上顺利安装并配置Android SDK,确保开发环境的稳定性和高效性。此外,还提供了解决网络连接问题的实用技巧,帮助用户克服常见的安装障碍。 ... [详细]
  • 如何安装和使用 WinSCP 与 PuTTY:连接 Linux 系统的专业工具指南
    本指南详细介绍了如何在Windows环境中安装和使用WinSCP与PuTTY,以实现与Linux系统的安全连接。WinSCP是一款开源的图形化SFTP客户端,支持SSH和SCP协议,主要用于在本地和远程计算机之间安全地传输文件。用户可以通过官方下载页面获取最新版本的WinSCP和PuTTY,按照简单的步骤完成安装,并利用这些工具进行高效的文件管理和远程操作。 ... [详细]
  • 对于希望在未越狱的iOS设备上修改Hosts文件的苹果用户来说,了解文件的具体位置和操作步骤至关重要。本文将详细介绍如何通过安装最新版本的iTunes来实现这一目标,并提供实用的操作指南,帮助用户轻松完成Hosts文件的编辑。 ... [详细]
  • 利用ZFS和Gluster实现分布式存储系统的高效迁移与应用
    本文探讨了在Ubuntu 18.04系统中利用ZFS和Gluster文件系统实现分布式存储系统的高效迁移与应用。通过详细的技术分析和实践案例,展示了这两种文件系统在数据迁移、高可用性和性能优化方面的优势,为分布式存储系统的部署和管理提供了宝贵的参考。 ... [详细]
  • ### 摘要`mkdir` 命令用于在指定位置创建新的目录。其基本格式为 `mkdir [选项] 目录名称`。通过该命令,用户可以在文件系统中创建一个或多个以指定名称命名的文件夹。执行此操作的用户需要具备相应的权限。此外,`mkdir` 还支持多种选项,如 `-p` 用于递归创建多级目录,确保路径中的所有层级都存在。掌握这些基本用法和选项,有助于提高在 Linux 系统中的文件管理效率。 ... [详细]
  • 如何在系统设置中找到高级配置选项 ... [详细]
  • 利用Python与Android进行高效移动应用开发
    通过结合Python和Android,可以实现高效的移动应用开发。首先,需要安装Scripting Layer for Android (SL4A),这是一个开源项目,旨在为Android系统提供脚本语言支持。SL4A不仅简化了开发流程,还允许开发者使用Python等高级语言编写脚本,从而提高开发效率和代码可维护性。此外,SL4A还支持多种其他脚本语言,进一步扩展了其应用范围。通过这种方式,开发者可以快速构建功能丰富的移动应用,同时保持较高的灵活性和可扩展性。 ... [详细]
  • 智能制造数据综合分析与应用解决方案
    在智能制造领域,生产数据通过先进的采集设备收集,并利用时序数据库或关系型数据库进行高效存储。这些数据经过处理后,通过可视化数据大屏呈现,为生产车间、生产控制中心以及管理层提供实时、精准的信息支持,助力不同应用场景下的决策优化和效率提升。 ... [详细]
  • Eclipse 错误解决:找不到指定的 APK 文件,项目名称未正确配置
    摘要:此问题可能是因为当前项目被错误地配置为库项目。解决方法如下:首先,打开项目属性(Project > Properties),在左侧列表中选择“Android”选项卡,取消选中“Is Library”复选框,然后点击“Apply”并重新构建项目。如果问题仍然存在,建议检查项目的构建路径和依赖关系,确保所有配置正确无误。 ... [详细]
  • JVM参数设置与命令行工具详解
    JVM参数配置与命令行工具的深入解析旨在优化系统性能,通过合理设置JVM参数,确保在高吞吐量的前提下,有效减少垃圾回收(GC)的频率,进而降低系统停顿时间,提升服务的稳定性和响应速度。此外,本文还将详细介绍常用的JVM命令行工具,帮助开发者更好地监控和调优JVM运行状态。 ... [详细]
  • 为了优化直播应用底部聊天框的弹出机制,确保在不同设备上的布局稳定性和兼容性,特别是在配备虚拟按键的设备上,我们对用户交互流程进行了调整。首次打开应用时,需先点击首个输入框以准确获取键盘高度,避免直接点击第二个输入框导致的整体布局挤压问题。此优化通过调整 `activity_main.xml` 布局文件实现,确保了更好的用户体验和界面适配。 ... [详细]
author-avatar
Victoria625_176
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有