java中GC垃圾回收讲解

前提了解:

java 内存分五部分:

(存放new 对象)、JVM方法栈(执行方法)、

本地方法栈(执行本地方法)、方法区(存放类信息,存放方法)、程序计数器

=========================================================================

1:垃圾回收,首先确认有哪些是垃圾

java内存中的五部分,栈中的数据随着方法进行压栈出栈,程序计数器占用少量的内存空间;所以就剩方法区

垃圾需要解决。

判断堆内存中new对象是否是垃圾?

  采用可达性分析,从栈、方法区出发,如果一个对象在栈、方法区中都没有被引用的话,那么就认为这个对象为垃圾对象。

判断方法区中的类、常量是否是垃圾?

  实例对象都已经回收;加载该类的ClassLoader回收;类对应的对象没有在任何地方被引用,无法在任何地方通过反射访问该类的方法,那么就认为该类为垃圾类。

2:其次,垃圾回收算法都有哪些

 采用分类回收算法,包含复制算法(适合少量对象存活)、整理回收算法(适合大量对象存活)

new的对象首先都放在年轻代内存中,其中年轻代分eden、survivor、survivor三部分,采用复制算法;对象在eden区中生成,当eden区内存满时,还存活的对象将复制到survivor区,当这个survivor区满时,次区的存活的对象将被复制到另外一个survivor区,如果这个survivor区也满时,就将从第一个survivor区复制过来的并且还存活的对象复制到老年代。

老年代中采用整理回收算法

猜你喜欢

转载自blog.csdn.net/Growing_hacker/article/details/108204099