java 垃圾回收机制

参考:

http://www.cnblogs.com/laoyangHJ/articles/java_gc.html

http://blog.csdn.net/mahongming/article/details/5992083

java垃圾啊回收机制

回收方法:

1.引用计数收集器 有引用,标志加1,垃圾回收标志是0的

2.跟踪收集器 从基础对象开始递归确定对象是否可达

3.object--finalize() 在垃圾回收时执行

4.程序员可以通过调研System.gc方法来建议执行垃圾收集

jvm内存分配:

1.堆:所有通过new创建的对象的内存都在堆中分配。

  1.新生代(Eden,FromSpace,ToSpace)

  2.旧生代

2.方法区:存放了要加载的类信息、静态变量、final类型的常量、属性和方法信息

3.本地方法栈:用于支持native方法的执行

4.栈:每个线程执行每个方法的时候都会在栈中申请一个栈帧,每个栈帧包括局部变量区和操作数栈,用于存放此次方法调用过程中的临时变量、参数和中间结果

gc原理:

1.gc只进行堆中的回收

2.对新生区的回收用 Copying算法  频率高

新生代采用空闲指针的方式来控制GC触发,指针保持最后一个分配的对象在新生代区间的位置,当有新的对象要分配内存时,用于检查空间是否足够,不够就触发GC。扫描出存活的对象,并复制到一块新的完全未使用的空间中,对应于新生代,就是在Eden和FromSpace或ToSpace之间copy。

3.对旧生区的回收 标记(Mark)算法来进行回收 频率低 

所谓标记就是扫描出存活的对象,然后再进行回收未被标记的对象,回收后对用空出的空间要么进行合并,要么标记出来便于下次进行分配,总之就是要减少内存碎片带来的效率损耗

原文地址:https://www.cnblogs.com/wjw334/p/3634231.html