原因

android 占用过多内存的原因!

痴心易碎 提交于 2019-12-09 19:11:29
安卓的进程管理机制是事件触发式,比如开机时、开机后、网络连接更改、电量不足、电量充足、时间更改、插上电源等等这些状态的改变都可看作一个事件,安卓系统允许程序关联这些事件(这个在程序开发中设定的),比如关联开机后,差不多就相当于我们一般说的开机启动了。但是安卓系统可以允许一个程序关联多个事件,拿谷歌地图来说吧,它关联的事件有“开机后、电量不足、电量充足、安装应用程序、卸载应用程序、更新应用程序、插上电源”等等。。。中间任何一个状态改变,系统都会自动运行谷歌地图进入后台,你说任务管理器得多少次才能完全结束呢? 安卓为什么要这样做呢?其实这样做的目的是为了提高程序运行的效率。举例来说,当你打开WIFI时,肯定要上网,系统就会调入一些上网的关联程序进入后台休眠(只占用内存,不占用CPU资源),当你真正需要运行这些程序的时候,系统直接把程序从后台转到前台运行,这样大大提高了程序的运行效率,我觉得这也是统筹方法的一种应用吧。至于说会不会软件一直启动会把内存占满,这个不用担心,当系统内存低于某个值时,内存管理机制会根据进程的优先级来关闭后台进程。 来源: oschina 链接: https://my.oschina.net/u/114929/blog/145322

【转】Java Crash原因汇总

冷暖自知 提交于 2019-12-01 06:34:08
如果是Java进程不知道什么原因退出或被杀死,想要分析具体原因,一般来说分下面几步: 1. 拿到Java应用程序的日志文件 2. 查找JVM的致命错误日志 3. 查找操作系统的core dump文件 4. 使用Dtrace查找“是谁杀死了Java进程 1. 拿到Java应用程序的日志文件 一般来说日志文件中会有很应用相关的错误信息。Java进程异常退出的原因最有可能就是应用程序本身的问题。因此检查Java应用程序的日志文件可能是最快定位到错误的方法。 2. 查找JVM的致命错误日志 如果应用程序日志文件中没有发现什么线索。那么还可以查看 JVM的致命错误日志。有些致命的错误,比如JNI或虚拟机本身产生的错误,可能使得Java应用程序来不及写日志就退出了。这时候可以查一个以 "hs_err_pid" 开头的日志名,例如hs_err_pid1125.log,其中1125是进程号。这个文件中也记录了一些宝贵的信息来提供一些线索,特别是Java自身的一些Bug。这个文件一般为于当前的工作目录中。用户可以用find命令自己搜索到。 3. 查找操作系统的core dump文件 作为被操作系统所调度的进程,Java进程也会在不同的信号下产生Core Dump文件,例如Sig_ill和Seg_segv。这些非常严重的错误的确会使得Java虚拟机根本来不及产生任何日志就宕了。拿到core