标签:安全 内存 失败 一段 map 反射 处理器 收集器 简单
对象的四种引用类型
怎么判断对象是否仍在使用?
可作为GC Roots的对象有哪几类?
方法区回收的必要条件
主要回收两部分内容:废弃的常量和不再使用的类型。性价比很低
安全点和安全区域
HotSpot没有为每一条指令生成OopMap,只在“特定位置”记录了这些信息(OopMap可理解成附加信息,对栈内的数据进行说明),这些位置称为安全点,线程在安全点可以被确定,从而确定GC Roots信息。
安全点特定位置
安全区域
安全区域是指一段代码片中,引用关系不会发生变化,在这个区域任何地方 GC 都是安全的,安全区域可以看做是安全点的一个扩展
并发情况下的可达性变动解决算法(G1和cms)
标记-清除算法
标记需要回收的对象或不需要回收的对象,再统一清除。
缺点:
标记-复制算法
把内存空间分为两块,每次只使用其中一块,当该块内存不足后,把存活的对象复制到另一块,再把原空间一次性清除。
优点:没有内存碎片。
缺点:内存空间利用率低;当存活对象较多时,效率变低
标记-整理算法
标记完成后,将存活的对象向一端移动,清除边界以外的内容
优点:内存规整,对象赋值/创建速度快
缺点:标记、清理效率不高
分代收集
分代收集是将对象按照存活时间进行分代(新生代和老年代),根据不同区域的特点结合前三种算法进行收集
新生代复制算法的改进:许多新生代的对象存活时间较短,不需要按照1:1的比例进行复制算法内存分配,可将内存分为较大的Eden区和两块较小的Survivor,回收时将Eden 和 Survivor 中还存活着的对象一次性地复制到另外一块 Survivor 空间上,最后清理掉 Eden 和刚才用过的 Survivor 空间
新生代
老年代
CMS
响应时间优先,标记清除算法。多用于B/S架构的服务端上
G1
面向整个堆空间的Region布局形式,每个Region都可以扮演Eden、Survivor或老年代空间。允许设定收集停顿时间
标签:安全 内存 失败 一段 map 反射 处理器 收集器 简单
原文地址:https://www.cnblogs.com/CodeMLB/p/13264264.html