Java GC 垃圾回收(二)之 判断那些可回收,怎么回收

1、哪些对象可回收?

可行性分析算法

通过一系列GC Roots(?1)作为起始点,其到对象之间的引用(?2)称为引用链,当对象到GC Roots之间不存在引用链相连,

则此对象是不可用的。如下,Object5,Object6,Object7被判定为可回收对象。

2、怎么回收?

3、方法区回收:

a.废弃常量:

没有任何String对象引用常量池的常量,也没有其他地方引用这个常量。

b.无用的类:

下列条件全部满足:

1.该类所有的实例都已经被回收。

2.加载改类的ClassLoader已经被回收

3.该类对应的java.lang.Class对象没有在任何地方被引用,无法在任何地方通过反射访问该类的方法。

?1 GC Roots

1.虚拟机栈中引用的对象

2.方法区中类静态属性引用的对象

3.方法区中常量引用的对象

4.本地方法栈中JNI引用的对象(java中C/C++编写的方法)

?2 引用

强引用:new 对象,引用还存在,对象不回收。

软引用:有用但非必需的对象。系统将要内存溢出之前,将这些对象列进回收范围中进行第二次回收。回收完内存还不够,则内存溢出。

弱引用:非必需对象。只能生存到下次垃圾回收之前。

虚引用:回收之前收到系统通知。

原文地址:https://www.cnblogs.com/codegod/p/8444071.html

时间: 2024-11-07 15:26:17

Java GC 垃圾回收(二)之 判断那些可回收,怎么回收的相关文章

面试官,不要再问我“Java GC垃圾回收机制”了

Java GC垃圾回收几乎是面试必问的JVM问题之一,本篇文章带领大家了解Java GC的底层原理,图文并茂,突破学习及面试瓶颈. 楔子-JVM内存结构补充 在上篇<JVM之内存结构详解>中有些内容我们没有讲,本篇结合垃圾回收机制来一起学习.还记得JVM中堆的结构图吗? 图中展示了堆中三个区域:Eden.From Survivor.To Survivor.从图中可以也可以看到它们的大小比例,准确来说是:8:1:1.为什么要这样设计呢,本篇文章后续会给出解答,还是根据垃圾回收的具体情况来设计的.

Java GC - 垃圾回收机制

1.简介 对于Java developer来说,了解JVM GC工作原理能够帮助我们开发出更优秀的应用,同时在处理JVM瓶颈时能够更加自由.在最近一年的应用开发中能体会到这些知识带来的好处,并且让我们的应用在较大规模的并发时能够良好的工作. 本文部分知识和图片来源于书籍<Java Performance> - Charlie Hunt & Binu John 著,该书全面讲解了Java 应用的性能分析.优化点与JVM原理等知识,本文(以及稍候的一些文章)只包含 GC collector

白话说java gc垃圾回收

gc是java区别于其他好几门语言(c/c++)的一个代表功能(当然也有很多可以自动管理内存的语言,如所有的脚本语言,你根本不知道内存管理这回事)! 当然,之所以要把c/c++和java相比,是因为java出现的初衷即是对标c++的缺点的.不管怎么样,gc让程序员gg们不用痛苦地管理内存,这是好事! 回归正题,gc是什么?小白:Garbage Collect 垃圾回收(内存),是一种自动管理内存的一种机制! 下面,我们分几个问题来讨论gc的实现及原理! 一条主线(如果是你会怎么做?): 1. 什

Java GC 垃圾回收算法 内存分配

垃圾回收(Garbage Collection, GC)是Java不同于c与c++的重要特性之一. 他帮助Java自动清空堆中不再使用的对象. 由于不需要手动释放内存,程序员在编程中也可以减少犯错的机会. 利用垃圾回收,程序员可以避免一些指针和内存泄露相关的bug(这一类bug通常很隐蔽). 垃圾回收实际上是将原本属于程序员的责任转移给计算机. GC需要完成的3件事情: 哪些内存需要回收 什么时候回收 如何回收 1 回收那些对象? 在Java中采用可达性分析算法来判定对象是否存活,是否可以被回收

Java GC(垃圾回收)的工作原理

Garbage Collection简称GC,是垃圾回收的意思. 内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃.Java语言提供的GC功能可以自动检测对象是否超过作用域,从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法,资源回收工作全部交由GC来完成,程序员不能精确控制垃圾回收的时机. 下面简要介绍一下GC在实现垃圾回收时的基本工作原理. Java的内存管理实际上就是对象的管理,其中包括对象的分配和释放.对于程序员来说,

Android内存优化1 了解java GC 垃圾回收机制3

引言 接App优化之内存优化(序), 作为App优化系列中内存优化的一个小部分. 由于内存相关知识比较生涩, 内存优化中使用到的相关工具, 也有很多专有名词. 对Java内存管理, GC, Android内存管理, Dalvik/ART等知识有一个理论的认识, 可以让我们更好的使用这些工具, 分析内存问题. 据此, 我们就先从理论入手, 聊聊GC那些事儿. 1, 何为GC GC 是 garbage collection 的缩写, 垃圾回收的意思. 也可以是 Garbage Collector,

Java GC 垃圾回收器的类型小结

阅读了java paper的垃圾回收器类型文章,在此做一个小结,文章部分翻译自java paper gc collector,部分自己做的总结,图片来自网络,在此仅用作理解表达之用. 一.JVM GC 垃圾回收器类型 JVM的垃圾回收器大致分为四种类型: (图片来自网络) 1.串行垃圾回收器  Serial Garbage Collector 串行垃圾回收器在进行垃圾回收时,它会持有所有应用程序的线程,冻结所有应用程序线程,使用单个垃圾回收线程来进行垃圾回收工作. 串行垃圾回收器是为单线程环境而

[Java基础]-- Java GC 垃圾回收器的分类和优缺点

https://blog.csdn.net/high2011/article/details/80177473?utm_source=blogxgwz2 所属专栏: Java 版权声明:尊重原创,转载请标明,本文转自 https://blog.csdn.net/high2011/article/details/80177473 关于Java的垃圾回收器,一直是个头疼的问题,这里简要说明下分类和优缺点,供选择使用. 一.JVM GC 垃圾回收器类型 JVM的垃圾回收器大致分为六种类型: 1.串行:

Android内存优化1 了解java GC 垃圾回收机制2 GC执行finalize的过程

1. finalize的作用 finalize()是Object的protected方法,子类可以覆盖该方法以实现资源清理工作,GC在回收对象之前调用该方法. finalize()与C++中的析构函数不是对应的.C++中的析构函数调用的时机是确定的(对象离开作用域或delete掉),但Java中的finalize的调用具有不确定性 不建议用finalize方法完成"非内存资源"的清理工作,但建议用于:① 清理本地对象(通过JNI创建的对象):② 作为确保某些非内存资源(如Socket.