深入理解理解java虚拟机
作者:网络转载 发布时间:[ 2016/11/30 10:59:12 ] 推荐标签:虚拟机 Java
垃圾回收重点区域:堆和方法区部分区域。
引用计数算法:
1,引用计数算法:
给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值加1;当引用失效时,计数器值减1;任何时刻计数器都为0的对象是不再被使用的,垃圾收集器将回收该对象使用的内存。
实现简单,判定效率很高。但是很难解决对象之间循环引用的问题。
2,可达性分析算法:
java所使用的垃圾回收算法。
基本思想:通过一系列的名为“GC Root”的对象作为起点,从这些节点向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Root没有任何引用链相连时,则该对象不可达,该对象是不可使用的,垃圾收集器将回收其所占的内存。
在java中,可作为GC Roots的对象包括下面几种:
a,虚拟机栈(栈帧中的本地变量表)中引用的对象
b,方法区中类静态属性引用的对象
c,方法区中常量引用的对象
d,本地方法栈中JNI(即Native方法)引用的对象
/———————————————————————————————————————-/
垃圾收集算法:
- 标记-清除算法
缺点:首先,效率问题,标记和清除效率都不高。其次,标记清除之后会产生大量的不连续的内存碎片,空间碎片太多会导致当程序需要为较大对象分配内存时无法找到足够的连续内存而不得不提前触发另一次垃圾收集动作。
- 复制算法
每次都是对其中一块内存进行回收,内存分配时不用考虑内存碎片等复杂情况,只需要移动堆顶指针,按顺序分配内存即可,实现简单,运行高效。
复制算法的缺点显而易见,可使用的内存降为原来一半。
- 标记-整理算法
标记-整理算法在标记-清除算法基础上做了改进,标记阶段是相同的标记出所有需要回收的对象,在标记完成之后不是直接对可回收对象进行清理,而是让所有存活的对象都向一端移动,在移动过程中清理掉可回收的对象,这个过程叫做整理。
标记-整理算法相比标记-清除算法的优点是内存被整理以后不会产生大量不连续内存碎片问题。
复制算法在对象存活率高的情况下要执行较多的复制操作,效率将会变低,而在对象存活率高的情况下使用标记-整理算法效率会大大提高。
- 分代收集算法
根据对象存活周期不同将内存划分为几块,一般是将堆分为新生代和老年代:
1,新生代,采用复制算法,只需要付出少量存活对象的复制成本
2,老年代,采用标记-清除或者标记-整理。
/———————————————————————————————————————-/
垃圾收集器:
/———————————————————————————————————————-/
内存分配与回收策略:
- 对象优先在eden分配
- 大对象直接进入老年代
- 长期存活的对象将进入老年代
- 动态对象年龄判定
- 空间分配担保
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11