android Jvm 笔记。内存溢出。内存区域划分。垃圾回收气
来源:互联网 发布:淘宝店怎样增加流量 编辑:程序博客网 时间:2024/05/21 08:57
native 溢出 也就是 direct memory 内存溢出 直接内存,不是虚拟机内存。是系统内存。
发现内存控件不足了就通知收集器进行垃圾回收,他只能等待 老年代 满了后 Full GC,然后 “顺带着”帮他清理掉内存的废气对象。否则他只能一直等到抛出内存异常时,先 catch 掉,在catch块中 “大喊”一声 System.gc()。要是虚拟机还是不听(System.gc设置关闭,调用不起作用 参数 -XX:+DiskableExplicitGC开关)。那就只能眼睁睁的看着堆中还有很多空闲内存。自己却不得不抛出内存溢出异常了。
垃圾收集器
新生代收集器 采用 复制算法。
serial 连续的, jdk 1.3.1之前是新生代手机的唯一选择。单线程收集器。收集时,会暂停其他所有工作线程,直到他结束。Stop The World。
(单个Cpu的环境来说)效率高,由于暂停了其他线程,没有线程交互的开销,只有他一个专心做垃圾收集获得最高的单线程收集效率。
(多个的话)他暂停了 其他cpu的工作。就低了。
ParNew 收集器其实就是 Serial收集器 的多线程版本。其他跟serial收集器完全一下。新生代收集器。只有他能与CMS(concurrent mark sweep)收集器配合工作。
CPU较少情况下,不一定不 serial收集器高效。 他对于GC是系统资源的有效利用还是有好处的。
并发与并行收集器 概念(指多线程下)
并行(Parallel):指多天垃圾收集线程并行工作,但此时用户线程仍处于等待状态。
并发(Concurrent):指用户线程与垃圾收集线程同时执行(但不一定是并行的,可能会交替执行),用户程序在继续执行,而垃圾收集程序运行于另一个CPU上。
Parallel Scavenge 收集器 目标是达到一个可用控制的吞吐量。可以自适应调节。
老年代 收集器
Serial Old 收集器 单线程收集器,使用 “标记-整理” 算法
Parallel old 收集器 老年代收集器,使用多线程和“标记-整理”算法。在 jdk1.6才开始提供。
CMS(Concurrent Mark Sweep)收集器 是一种以获取最短回收停顿时间为目标的收集器。使用“标记-清除” 算法。
运作过程复杂,分4个步骤:
1、初始标记
2、并发标记
3、重新标记
4、并发清除
初始标记、重新标记 会stop the world。 但很快。另外2个比这个耗时,但可以与用户线程一起工作。
缺点: 看书
详情请看 深入理解java虚拟机一书。
G1 收集器
看书了解
0 0
- android Jvm 笔记。内存溢出。内存区域划分。垃圾回收气
- JVM的内存区域划分以及垃圾回收机制详解
- JVM内存模型&内存溢出&垃圾回收
- JVM内存区域和垃圾回收
- JVM学习03-内存管理和垃圾回收01(之内存区域划分)
- JVM内存区域划分
- jvm内存区域划分
- JVM内存区域划分
- jvm 内存区域划分
- JVM内存区域划分
- jvm内存区域划分
- JVM内存区域划分
- JVM内存区域划分
- JVM内存区域划分
- JVM内存区域划分
- JVM内存区域划分
- JVM内存区域划分
- jvm 内存区域划分
- openfire+smack收发消息
- 元组和数组
- KMP算法实现
- JS获取新浪实时股票行情数据
- 【使用JSOUP实现网络爬虫】修改数据-设置一个元素的HTML内容
- android Jvm 笔记。内存溢出。内存区域划分。垃圾回收气
- Mac配置全局 Composer
- leetCode #55 Jump Game 贪心
- 游戏之数独之最终的结果
- wpa_supplicant无线网络配置
- 解决Nginx的connect() to 127.0.0.1:8080 failed (13: Permission denied) while connect
- 30多条mysql数据库优化方法,千万级数据库记录查询轻松解决
- Android Studio : 修改Debug签名的Key
- 欧拉函数