《深入理解java虚拟机》之垃圾回收
来源:互联网 发布:淘宝找回密码系统繁忙 编辑:程序博客网 时间:2024/05/17 09:29
判断对象存活 引用计数算法(弃用,难以解决循环引用) 可达性分析算法(GC Roots对象向下搜索) (如果对象没有与GC Roots相连的引用链,它会被标记,然后执行finalize()筛选,当对象没有覆盖finalize()方法, finalize()方法被虚拟机调用过,该对象被回收。finalize()方法里只要使得该对象与引用链上对象关联。引用垃圾回收级别(内存紧张时,存活的对象也回收) 强引用(不会被回收) 软引用 弱引用 虚引用回收方法区 废弃常量 无用的类(三个条件:java堆不存在该类实例,加载该类的类加载器被回收,该类Class反射对象没有被引用)GC算法 标记-清除算法(效率低,产生不连续的碎片) 复制算法(内存缩小为原来一半,对象存活率高时复制操作就多,效率变低。改进:将内存分为Eden, from Survivor, to Survivor) 标记-整理算法 分代收集算法(新生代采用复制算法,老年代采用标记-清除或整理算法)可达性分析算法问题 GC Roots查找引用消耗时间 枚举根节点停顿,防止引用关系变化 (解决方法:准确式GC,通过OopMap直接得知对象引用地址。在线程跑到安全点Safepoint才GC GC停顿怎样使得线程到安全点 抢占式中断 主动式中断 程序不执行时无法主动跑到安全点:安全区域) 垃圾收集器 Serial收集器(单线程、Client模式下默认新生代收集器) ParNew收集器(多线程、Server模式下默认新生代收集器) Parallel Scavenge收集器(多线程,复制算法新生代收集器) Serial Old收集器(单线程,标记-清除算法老年代收集器) Parallel Old收集器(多线程,标记-整理算法老年代收集器) CMS收集器(多线程,标记-清除算法,以最短停顿时间为目标)内存分配与回收策略 对象有先在Eden分配 大对象直接进入老年代(典型大对象:很长的字符串及数组。原因:避免在Eden与两个survivor区复制) 长期存活的对象将进入老年代(对象年龄计数器,Eden中对象在1次GC后存活就移到Survivor中,15次就移到老年代) 动态对象年龄判定(如果Survivor中相同年龄对象大小总和大于Survivor一半,大于等于该年龄的对象直接进入老年代) 空间分配担保(新生代使用复制收集算法,使用一个Survivor作为备份,当大量对象在GC后存活, 就要老年代担保,将Survivor无法容纳的对象移到老年代。而多少对象在GC后存活无法知道, 就取经验值,与老年代空间比较,决定是否进行Full GC(老年代内的GC))
0 0
- 《深入理解java虚拟机》之垃圾回收
- 深入理解JAVA虚拟机之JVM内存以及垃圾回收
- 深入理解java虚拟机【垃圾回收算法】
- 深入理解java虚拟机[垃圾回收算法]
- 《深入理解java虚拟机》垃圾回收算法
- 【深入理解Java虚拟机】垃圾回收机制
- 深入理解Java虚拟机--垃圾回收算法
- 深入理解Java虚拟机--垃圾回收器
- 深入理解java虚拟机--->垃圾回收算法
- 深入理解java虚拟机(垃圾回收)
- 深入理解Java之垃圾回收
- 深入理解Java之垃圾回收
- 深入理解Java虚拟机笔记--垃圾回收GC
- 深入理解Java虚拟机 垃圾回收器GC
- JVM垃圾回收(深入理解Java虚拟机学习笔记)
- 深入理解Java虚拟机学习笔记-2.JVM垃圾回收
- 个人读书笔记---“深入理解java虚拟机”---垃圾回收
- 深入理解Java虚拟机学习笔记2.1-G1垃圾回收
- 钱究竟是什么东西(三)-货币供应量
- ADB not responding. You can wait more,or kill"abd.exe“。。。。。
- IP网际协议
- 网店刷收藏会不会被降权
- Semantic matching & Semantic correlation matching
- 《深入理解java虚拟机》之垃圾回收
- opencv7-ml之KNN
- hibernate4.3.5需要的jar包
- 【Android】读《第一行代码》笔记总结
- ServletContext练习
- socket是什么
- Swift 细小知识点汇集
- 第4周项目3-单链表应用(3)
- 和大于S的最小子数组