6_(JAVA基础300集最全教程 学习)java的垃圾回收机制_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 6_(JAVA基础300集最全教程 学习)java的垃圾回收机制

6_(JAVA基础300集最全教程 学习)java的垃圾回收机制

 2014/5/8 3:16:53  up-up-programmer  程序员俱乐部  我要评论(0)
  • 摘要:首先要明白的是java中,程序员是不能指定程序什么时候回收内存的,也不可以要求马上回收某块内存,程序员可以在代码中显示的通知垃圾回收器需要回收内存,例如调用System.gc(),但具体什么时候去回收是垃圾回收自己去决定的。说道回收,首先应该先说说现有的垃圾回收算法:1.标记-清除算法:首先标记出所有需要回收的对象,在标记完成后统一回收掉所有被标记的对象;-----标记和清除的效率都不高,且清除后会产生空间碎片问题;2.复制算法:将内存快划分为两个大小相等的空间,每次使用其中的一块
  • 标签:最全 学习 Java 教程

首先要明白的是java中,程序员是不能指定程序什么时候回收内存的,也不可以要求马上回收某块内存,程序员可以在代码中显示的通知垃圾回收器需要回收内存,例如调用System.gc(),但具体什么时候去回收是垃圾回收自己去决定的。


说道回收,首先应该先说说现有的垃圾回收算法
1.标记-清除算法:首先标记出所有需要回收的对象,在标记完成后统一回收掉所有被标记的对象;-----标记和清除的效率都不高,且清除后会产生空间碎片问题;
2.复制算法:将内存快划分为两个大小相等的空间,每次使用其中的一块。当这一块使用完时就把存活的对象复制到另一块上面,再把已使用的内存快一次性清除掉;---会浪费一半的内存空间;
3.标记-整理算法:和标记-清除算法类似,第一步还是标记出所有存活的对象,而第二步就是让所有存活的对象向一端移动,然后直接清理调端边界以外的内存。----
4.分代收集算法:根据对象的存活周期,将内存空间划分为几块,一般分为:一个新生区,两个存活区,一个老年区,一个永久区;这样就可以根据各个区的特点选用最适合的收集算法。


在识别对象是否需要回收时,一般采用两种方式:引用计数和根节点跟踪的方式。
1.引用计数就是对象被引用一次,则在对象的计数器上增加一,释放一次则减一,当计数器为0时表示为无用对象,但存在一个问题:对象的相互引用问题;
2.根节点跟踪方式就从根节点开始可以抵达的节点,这些节点标识还存活着,其余不可抵达的都为无用对象。以下为根节点的取值范围:

由于不同厂家的实现方式并不一定一样,但总体上会包含以下方面:
1.局部变量中的对象引用;
2.栈帧的操作数栈;
3.类变量中的对象引用;
4.本地方法栈中的引用;




发表评论
用户名: 匿名