关于垃圾回收的小结
2016-04-06 19:33
357 查看
垃圾回收主要是针对堆这个区域的,而堆主要是存放对象。
在进行垃圾回收的时候该如何判断对象是否已经死亡呢,通常有两种方式:引用计数法和发达性分析算法
引用计数法就是给对象添加一个引用计数器,每次有一个地方引用它时,计数器的值就加一,当引用失效时,计数器的值就减一。任何时刻计数器的值为0的对象就是不可以在被使用的对象了。但是这个算法很难解决对象之间相互循环引用的问题。
可达性引用:就是通过一系列的称为GC Roots的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连时,则证明该对象是不可用的。
GC Roots包括:虚拟机栈(栈帧中的本地变量表)中引用的对象、方法区中类静态属性引用的对象、方法去中常量引用的对象、本地方法栈中JNI(一般说的Native方法)引用的对象。
垃圾回收算法:标记-清除算法、复制算法、标记-整理算法、分代收集算法
堆一般分为新生代和老年代。新生代又分为Eden区、和两个Survivor区。新生代中,每次垃圾回收时发现都会有大量的对象死去,只有少量的对象会存活,那就选用复制算法,只需要付出少量的存活对象的复制成本就可以完成收集。而老年代中对象的存活率比较高,没有额外的空间对它进行担保,就必须使用标记-清除或者标记-整理算法。
内存分配策略:
对象优先在Eden区分配、大对象直接进入老年代、长期存活的对象进入老年代、动态的年龄判断、空间分配担保。
在进行垃圾回收的时候该如何判断对象是否已经死亡呢,通常有两种方式:引用计数法和发达性分析算法
引用计数法就是给对象添加一个引用计数器,每次有一个地方引用它时,计数器的值就加一,当引用失效时,计数器的值就减一。任何时刻计数器的值为0的对象就是不可以在被使用的对象了。但是这个算法很难解决对象之间相互循环引用的问题。
可达性引用:就是通过一系列的称为GC Roots的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连时,则证明该对象是不可用的。
GC Roots包括:虚拟机栈(栈帧中的本地变量表)中引用的对象、方法区中类静态属性引用的对象、方法去中常量引用的对象、本地方法栈中JNI(一般说的Native方法)引用的对象。
垃圾回收算法:标记-清除算法、复制算法、标记-整理算法、分代收集算法
堆一般分为新生代和老年代。新生代又分为Eden区、和两个Survivor区。新生代中,每次垃圾回收时发现都会有大量的对象死去,只有少量的对象会存活,那就选用复制算法,只需要付出少量的存活对象的复制成本就可以完成收集。而老年代中对象的存活率比较高,没有额外的空间对它进行担保,就必须使用标记-清除或者标记-整理算法。
内存分配策略:
对象优先在Eden区分配、大对象直接进入老年代、长期存活的对象进入老年代、动态的年龄判断、空间分配担保。
相关文章推荐
- Settings->Accessibility->Large text分析
- poj 2186 Popular Cows tarjan
- 作业四:结对编程项目——四则运算
- 《linux内核设计与实现》第三章
- POJ 3259 Wormholes
- 俄罗斯方块单人游戏设计概述
- 面向对象编程学习一点感悟(java)
- 第五周项目一 三角形
- Android-Animation动画基础复习
- Linux环境搭建:1. 安装VMware
- git 提交模版设置
- Qt多线程编程一:使用QSemaphore和waitCondition管理一系列资源
- hdu 1520 Anniversary party 树形dp水题
- 最大联通子数组
- 色彩
- Comet4J简介
- EL表达式的作用-执行运算
- Oracle 外连接和 (+)号的用法
- Mac 端安装Cocoapod
- LeetCode *** 238. Product of Array Except Self