GC在堆和方法区的内存回收

原创 2016年07月31日 20:47:35

堆对象的存活

判断对象是否存活,主流实现是可达性分析。 

可达性算法的基本思路,通过一系列为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain), 当一个对象到GC Roots 没有任何引用链相连时,相当于图论的从GC Roots不可达,则这个对象不可用。

  • 引用类型
    • 强引用
      只要强引用还存在,垃圾收集器永远不会收掉被引用的对象
    • 软引用
      在系统将要发生内存异常之前,将会把这些对象列进回收范围之中进行第二次回收。
    • 弱引用
      被弱引用关联的对象只能生存道下一次垃圾收集发生之前。
    • 虚引用
      一个对象是否有虚引用的存在,完全不会对其生存时间构成影响,也无法通过虚引用来取得一个对象的实例。

对象的回收过程

当对象没有覆盖finalize方法,或者fialize已经被虚拟机调用过, 则是没必须要执行

Created with Raphaël 2.1.0分析对象对象不可达需要执行finalize方法放入F-Queue队列,由Finalizer线程去执行它回收这个对象存活(不回收)yesnoyesno

回收方法区

 方法区即为永久代,主要回收两部分内容:废弃常量和无用类。

满足以下3个条件的类称之为无用类

  • 该类所所有的对象实例已经被回收,也就是java堆中不存在该类的任何实例
  • 加载该类的ClassLoader已经被回收
  • 该类对应的java.lang.Class对象没有在任何地方被引用,无法在任何地方通过反射访问该类的方法。

在大量使用反射、动态代理、CGLib等ByteCode框架、动态生成JSP以及OSGI这类频繁自定义ClassLoader的场景都需要虚拟机具备类卸载的功能,以保证永久带不会溢出。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Marshall_One/article/details/52080475

Java 内存区域和GC机制详解解读

这篇文章对于java虚拟机的内存管理机制进行讲解,我感觉内容很好很清晰,所以将文章转载过来,我建议读者可以静下心来读完。原文地址Java 内存区域和GC机制最详解。在这里我也自己写写个人的理解,供读者...
  • wangyang1354
  • wangyang1354
  • 2016-10-11 19:39:35
  • 2568

JAVA gc垃圾回收机制

amath321 发布于 4个月前,共有 0 条评论 一、GC概要   JVM堆相关知识     为什么先说JVM堆?     JVM的堆是Java对象的活动空间,程序中的类的对象从...
  • jiafu1115
  • jiafu1115
  • 2011-11-29 17:35:05
  • 62136

GC算法与内存回收

Java内存回收虽说是自动完成,但当需要排查各种内存溢出问题以及提高系统并发量时,仍然需要对Java的垃圾回收技术进行必要调节与监控。本文主要介绍垃圾收集器的GC算法与内存回收策略。...
  • thesingularityisnear
  • thesingularityisnear
  • 2016-07-28 00:30:03
  • 1065

4种GC方法+分代回收+触发GC情况+内存申请过程

①引用计数 对象增加一个引用时,引用数+1。减少一个时,引用数-1。当进行垃圾回收时,只回收引用数为0的对象。面对互相引用无解,方法比较老,基本弃用 ②标记+清除 从根节点遍历标记对象,然后遍历整...
  • sinat_25233885
  • sinat_25233885
  • 2016-12-22 17:17:26
  • 1911

JVM中GC垃圾回收机制与垃圾回收算法

 1.运行时内存区               要想了解GC垃圾回收机制,首先要了解虚拟机中内存分布以及管理。如下图所示,运行时数据区分为方法区、堆、虚拟机栈、本地方法栈和程序计数器等。每一块区域解释...
  • carson0408
  • carson0408
  • 2018-03-19 13:17:32
  • 45

【JVM】GC垃圾回收(二)——对象:你才死了呢!

【前言】 有人说:人这辈子一共会死三次。第一次是你的心脏停止跳动,那么从生物的角度来说,你死了;第二次是在葬礼上,认识你的人都来祭奠,那么你在社会上的地位就死了;第三次是在最后一个记得你的...
  • srk950606
  • srk950606
  • 2018-03-05 21:56:50
  • 71

GC垃圾回收算法

什么是GC垃圾回收呢。日常生活中我们去餐厅吃饭吃完饭,吃完饭走了餐具不用管,服务员在把餐具拿走,这是一种方式,服务员怎么知道他要来把餐具拿走呢,因为你走了,这个位置空了。服务员什么时候拿走餐具很重要,...
  • qq_30739519
  • qq_30739519
  • 2016-04-10 09:53:17
  • 3951

再论C++之垃圾回收(GC)

本文已经迁移到: http://cpp.winxgui.com/cn:garbage-collection-in-cplusplus使用智能指针(smart pointers) http://w...
  • xushiweizh
  • xushiweizh
  • 2006-11-24 02:04:00
  • 29143

触发JVM进行Full GC的情况及应对策略

Full GC又称作Major GC,属于老年代GC,指发生在老年代的GC,相对这种GC的有新生代GC即Minor GC。出现Full GC的时候经常伴随至少一次的Minor GC,但非绝对的,Maj...
  • chenleixing
  • chenleixing
  • 2015-07-01 08:54:00
  • 44968

JVM 运行时数据区及GC机制

—— 参考周志明的《understanding the JVM》 运行时数据区域 程序计数器 Java虚拟机栈(Java方法执行的内存模型) 本地方法栈 Java堆 方法区 GC机制 内存回收的主...
  • u013887236
  • u013887236
  • 2016-03-02 14:19:16
  • 508
收藏助手
不良信息举报
您举报文章:GC在堆和方法区的内存回收
举报原因:
原因补充:

(最多只允许输入30个字)