java内存区域

  1. 程序计数器PC
  2. java栈(虚拟机栈)
  3. c栈(本地方法栈)
  4. 方法区(是堆的一个逻辑部分)

线程私有:1,2,3 , 线程共享:4,5 , 所以4,5位gc处理的区域

对象回收策略

  • 引用计数法:不适合用于循环引用场景
  • 可达性分析法:从gc root开始搜索,不可达的对象都能被回收,gc roots包括java栈引用的对象、c栈引用的对象、方法区的常量/静态变量引用的对象,

gc的过程本质是对gc roots可达性的分析。

GC的区域:堆

堆是gc的主要对象,根据对象存活周期分为:新生代(复制算法)、老年代(标记清除算法、标记整理算法)、永久代。

新生代使用复制算法将内存分割成8:1:1,每次回收只会浪费10%,如果10%的survivor空间不足,就会采用分配担保将对象放入老年代,所以对象优先在新生代(Eden)分配,大对象会在老年代分配,长期存活的对象也会进入到老年代,minor gc 采用复制算法来清理新生代,而major gc采用标记清除算法或者标记整理算法来清理老年代。

参考资料

图解 Java 垃圾回收算法及详细过程!

如果您觉得写得还不错或者对您有所启发,那就赶紧动动您的小指头,点击下面的红色按钮,狠狠地打赏一番吧。