1. android游戏内存修改问题(程序猿进)
android:process定义activity运行所在的进程名称。一般情况下,应用的所有组件都运行在为应用创建的默认的进程中,该默认进程的名称应用包名称一致。通过定义元素的“process”属性可以为所有组件指定一个不同的默认进程。但是任意组件都可以重写默认进程,以便实现多进程操作。如果该属性指定名称以“:”开头,则一个新的专属于该应用的进程将会被创建。如果该进程名以小写字母开头,则为该activity提供权限以让其在一个全局的进程中运行。这样会允许多个应用的不同组件共用一个进程,以便节省资源。Android是支持多进程的,每个进程的内存使用限制一般为24MB的内存,所以当完成一些很耗费内存的操作如处理高分辨率图片时,需要单独开一个进程来执行该操作(上面的配置可以用来实现该操作)。即便如此,开发者还是不要随意多开进程来耗费用户的资源。(内存限制,有16MB,24MB,32MB,很老的机型的内存限制会是16MB,这个具体还要再搜索下资料。。)另外一些还有一些其他的方式来绕过内存限制,使用的资源来完成自己的任务,如下文(有待实践):HowtoworkaroundAndroid’-process24MBmemorylimit.Onsomeolderdevices,suchastheG1,thelimitisevenlowerat16MB.What’smore,.:E/dalvikvm-heap(12517):1048576-.E/GraphicsJNI(12517):VMwon'tletusallocate1048576bytesD/AndroidRuntime(12517):ShuttingdownVMW/dalvikvm(12517):threadid=1:(group=0x4001d7f0)E/AndroidRuntime(12517):FATALEXCEPTION:mainE/AndroidRuntime(12517):java.lang.OutOfMemoryError:.Foradevice,liketheNexusOne,with512MBofphysicalRAM,settingtheper-%oftheRAMisasillymistake.Butanyway,that’—i.e.findhowtoworkaroundit.:.UsingtheNDK(nativedevelopmentkit)andJNI,it’(e.g.malloc/freeornew/delete),.It’strue,,(evenimagedata).Anotherway,whichworkswellforimages,istouseOpenGLtextures—..os.Debug.getNativeHeapAllocatedSize().,onaNexusOne,—.
2. Android系统内存管理
部分内容出至林学森的Android内核设计思想。
Android官网内存管理
部分出至 https://www.jianshu.com/p/94d1cd553c44
Android本质是Linux所以先从Linux说起。
Linux的内存管理为系统中所有的task提供可靠的内存分配、释放和保护机制。
核心:
虚拟内存
内存分配与释放
内存保护
将外存储器的部分空间作为内存的扩展,如从硬盘划出4GB大小。
当内存资源不足时,系统按照一定算法自动条形优先级低的数据块,并把他们存储到硬盘中。
后续如果需要用到硬盘中的这些数据块,系统将产生“缺页”指令,然后把他们交换回内存中。
这些都是由操作系统内核自动完成的,对上层应用”完全透明“。
每个进程的逻辑地址和物理地址都不是直接对应的,任何进程都没办法访问到它管辖范围外的内存空间——即刻意产生的内存越界与非法访问,操作系统也会马上阻止并强行关闭程序,从而有力的保障应用程序和操作系统的安全和稳定。
一旦发现系统的可用内存达到临界值,机会按照优先级顺序,匆匆低到高逐步杀掉进程,回收内存。
存储位置:/proc/<PID>/oom_score
优先级策略:
进程消耗的内存
进程占用的CPU时间
oom_adj(OOM权重)
Android平台运行的前提是可用内存是浪费的内存。它试图在任何时候使用所有可用的内存。例如,系统会在APP关闭后将其保存在内存中,以便用户可以快速切换回它们。出于这个原因,Android设备通常运行时只有很少的空闲内存。在重要系统进程和许多用户应用程序之间正确分配内存内对存管理是至关重要。
Android有两种主要的机制来处理低内存的情况:内核交换守护进程(kernel swap daemon)和低内存杀手(low-memory killer)。
当用户在APP之间切换时,Android会在最近使用的(LRU)缓存中保留不在前台的APP,即用户看不到的APP,或运行类似音乐播放的前台服务。如果用户稍后返回APP,系统将重用该进程,从而使APP切换更快。
如果你的APP有一个缓存进程,并且它保留了当前不需要的内存,那么即使用户不使用它,你的APP也会影响系统的整体性能。由于系统内存不足,它会从最近使用最少的进程开始杀死LRU缓存中的进程。该系统还负责处理占用最多内存的进程,并可以终止这些进程以释放RAM。
当系统开始终止LRU缓存中的进程时,它主要是自底向上工作的。系统还考虑哪些进程消耗更多的内存,从而在终止时为系统提供更多的内存增益。你在LRU列表中消耗的内存越少,你就越有可能留在列表中并能够快速恢复。
为了满足RAM的所有需求,Android尝试共享RAM来跨进程通信。它可以做到以下方式:
Android设备包含三种不同类型的内存:RAM、zRAM和storage。
注意:CPU和GPU都访问同一个RAM。
内存被拆分成页。通常每页有4KB的内存。
页面被认为是空闲的或已使用的。
空闲页是未使用的RAM。
已使用页是系统正在积极使用的RAM,分为以下类别:
干净的页面(Clean pages)包含一个文件(或文件的一部分)的一份精确副本存在存储器上。当一个干净的页面不再包含一个精确的文件副本(例如,来自应用程序操作的结果)时,它就变成了脏页。可以删除干净的页,因为它们始终可以使用存储中的数据重新生成;不能删除脏页(Dirty pages),否则数据将丢失。
内核跟踪系统中的所有内存页。
当确定一个应用程序正在使用多少内存时,系统必须考虑shared pages。APP访问相同的服务或库将可能共享内存页。例如,Google Play Services 和一个游戏APP可能共享一个位置服务。这使得很难确定有多少内存属于这个服务相对于每个APP。
当操作系统想要知道所有进程使用了多少内存时,PSS非常有用,因为页面不会被多次计数。PSS需要很长时间来计算,因为系统需要确定哪些页面是共享的,以及被有多少进程。RSS不区分共享页面和非共享页面(使计算速度更快),更适合于跟踪内存分配的更改。
内核交换守护进程(kswapd)是Linux内核的一部分,它将使用过的内存转换为空闲内存。当设备上的空闲内存不足时,守护进程将变为活动状态。Linux内核保持低和高的可用内存阈值。当空闲内存低于低阈值时,kswapd开始回收内存。当空闲内存达到高阈值,kswapd将停止回收内存。
kswapd可以通过删除干净的页面来回收干净的页面,因为它们有存储器支持并且没有被修改。如果进程试图寻址已删除的干净页,则系统会将该页从存储器复制到RAM。此操作称为请求分页。
kswapd将缓存的私有脏页(private dirty pages)和匿名脏页(anonymous dirty pages)移动到zRAM进行压缩。这样做可以释放RAM中的可用内存(空闲页)。如果进程试图触摸zRAM中脏页,则该页将被解压缩并移回RAM。如果与压缩页关联的进程被终止,则该页将从zRAM中删除。
如果可用内存量低于某个阈值,系统将开始终止进程。
lmkd实现源码要在system/core/lmkd/lmkd.c。
lmkd会创建名为lmkd的socket,节点位于/dev/socket/lmkd,该socket用于跟上层framework交互。
小结:
LMK_TARGET: AMS.updateConfiguration() 的过程中调用 updateOomLevels() 方法, 分别向/sys/mole/lowmemorykiller/parameters目录下的minfree和adj节点写入相应信息;
LMK_PROCPRIO: AMS.applyOomAdjLocked() 的过程中调用 setOomAdj() 向/proc/<pid>/oom_score_adj写入oom_score_adj后直接返回;
LMK_PROCREMOVE: AMS.handleAppDiedLocked 或者 AMS.() 的过程,调用remove(),目前不做任何事,直接返回;
为了进一步帮助平衡系统内存并避免终止APP进程,可以Activity类中实现ComponentCallbacks2接口。提供的onTrimMemory()回调方法允许APP在前台或后台侦听与内存相关的事件,然后释放对象以响应应用程序生命周期或表明系统需要回收内存的系统事件。
onTrimMemory()回调是在Android 4.0(API级别14)中添加的。
对于早期版本,可以使用onLowMemory(),它大致相当于TRIM_MEMORY_COMPLETE事件。
一个专门的驱动。(Linux Kernel 4.12 已移除交给kswapd处理)。
很多时候,kswapd无法为系统释放足够的内存。在这种情况下,系统使用onTrimMemory()通知APP内存不足,应该减少其分配。如果这还不够,内核将开始终止进程以释放内存,它使用低内存杀手(LMK)来完成这个任务。
为了决定要终止哪个进程,LMK使用一个名为oom_adj_score的“out of memory”分数来确定运行进程的优先级,高分的进程首先被终止。
后台应用程序首先被终止,系统进程最后被终止。
下表列出了从高到低的LMK评分类别。第一排得分最高的项目将首先被杀死:
Android Runtime(ART)和Dalvik虚拟机使用分页(Paging)和内存映射(mmapping)来管理内存。应用程序通过分配新对象或触摸已映射页面来修改内存都将保留在RAM中,并且不能被调出。应用程序释放内存的唯一方式是垃圾收集器。
3. 修改Android Studio的内存大小
首先我们看看当前AS的内存大小:
打开设置
点击Appearance
然后将 Show memory indicator 这个选项勾选上,点击右下角的Apply。接着我我们回到主页面,就可以在页面的右下角看到当前AS所占用的内存大小了。
我们可以看到,现在的内存为1446M。但是太小了,想要扩大,该怎么弄呢?
我们先找到 Android Studio 的安装目录,在其 bin 目录下,找到 studio64.exe.vmoptions 这样一个vmoptions文件,然后将其打开,我所用的是NotePad++。
我们可以看到,方框中的两个参数,就是需要我们进行变更的参数。
根据自己电脑内存大小,对这两个参数进行调整。
别忘了对修改之后的文件进行保存。
然后我再回到AS中,点击File->Ivalidate Caches让之前的设置生效。
然后就静待Android Studio重启就好了。
4. 求助:android平台可不可以做出内存修改器
可以,但是一般的手机需要你先破解了才可以,要不手机只有user权限,你就修改不了系统。手机破解你可以找网上的一些破解软件 apk市场里面搜索 手机root。手机破解后你就可以做一些内存修改器的apk了。
如果对您有帮助,希望采纳,谢谢。
5. 提升Android手机运行内存教程
随着智能手机的不断发展以及用户需求的不断增加,手机的运行内存(RAM)的大小已经从MB过渡到了GB容量,作为用户的我们只是知道运行内存越大越好,而运行内存到底有什么用你知道么?接下来是我为大家收集的提升Android手机运行内存教程,希望能帮到大家。
提升Android手机运行内存教程
知识小科普
无应用运行时内存占用已近半
这个时候就又到了笔者给大家科普的时候了。RAM全称Random Access Memory,我们都习惯称之为运行内存,又称随机存储器。其是与CPU直接交换数据的内部存储器,也叫主存(内存)。它可以随时读写,并且速度很快,通常作为系统或正在运行程序的临时数据存储媒介。
为啥安卓手机更吃内存
看到这你可能深深的认为RAM还是越大越好,对没错笔者也是这么认为的。纵观安卓手机的发展,RAM已经从最初的128MB发展到了现在的6GB(消息称8GB已经在路上),而苹果从最初的128MB至今RAM也不过才发展到2GB而已,但仍然可以流畅运行,这又是为何呢?
iOS VS Android(图片引自antutu)
这就完全要归结于安卓和苹果不同的内存运行机制。安卓系统在运行一个程序时:CPU开始计算-内存开始缓存-再读取目标文件开始计算,当结束程序时CPU计算完毕但内存仍然有部分缓存占用。而苹果就不同当CPU开始运算后就会收集所有内存为应用运行进行缓存,在结束应用时会释放全部内存。
用户的内存不足解决之道
对于一般用户来说就是安装各类清理软件,卸载多余不常用APP,软件关闭后及时清理后台。目前许多手机中还加入了后台应用管理的功能并提供一键清理选项,实在受不了的时候就对手机进行一次出厂化设置。
手机中自带的权限管理应用
对于安卓有一定了解的用户,则会选择精简版的ROM来进行刷机(一般情况下系统的精简度是和流畅性成正比的),并通过ROOT获取权限,从根本控制软件的自启及对内存的占用。
各类刷机软件中都提供精简版ROM一键刷机和一键ROOT(图片引自romjd)
而那些动手能力极强的用户还会选择一些特别的方法,比如通过创建Swap(交换分区)来解决,当用户的实体内存不足时便会调用这部分虚拟内存来运行应用。
Linux中的Swap即交换分区,类似于Windows的虚拟内存,就是当内存不足的时候,把一部分硬盘空间虚拟成内存使用,从而解决内存容量不足的情况。而Android正是基于Linux研发的操作系统,所以也可以使用Swap分区来提升系统运行效率。
对于安卓手机如何创建Swap的具体过程笔者就不做过多介绍,不过首先你的手机内核需要支持Swap,并且已ROOT,可以利用内置存储或内存卡(需注意卡片读写速度)进行制作,详细方法及所需软件请执行网络。
看了“提升Android手机运行内存教程”还想看:
1. 安卓手机运行内存不够用的解决方法
2. 怎样能刷运行内存
3. 安卓手机运行内存太小怎么优化
4. 怎样扩大手机内部内存
5. 怎样扩展手机最大内存