class会不会回收?用不到的class怎么回收_牛X的java程序员必备的GC基础知识, 面试肯定用的到...

1. GC回收哪些内存区域呢?

  • 堆内存
    • 对象
    • 数组
  • 方法区
    • 该类所有的额实例都已经被回收, 也就是java堆中不存在该类的任何实例
    • 加载该类的ClassLoader已经被回收
    • 该类对应的java.lang.Class对象在任何地方没有被引用, 也无法通过反射访问该类方法。
    • 垃圾回收性价比比较低, 一般不回收
    • 废弃常量
    • 无用的类(需要同时满足以下三个条件)

2. GC是如何判断垃圾对象的?

1. 引用计数法

给对象的对象头中添加一个counter引用计数器,当该对象被引用时,counter+1,当不被引用时, counter-1

当对象的counter为0时,则说明该对象不可用,也就是垃圾对象。

缺点:容易引起对象之间的互相循环引用,造成死锁状态。

2. 可发性分析算法

通过GC Roots的对象为起点,向下搜索,能到达的对象为不可回收对象,不能到达的对象为需要回收的对象。Java中就是通过可达性分析算法来判定对象是否存活的。

d4112c413a4491913a5e3c178a72da72.png

3. 对象引用

无论是通过引用计数算法判断对象的引用数量,还是通过根搜索算法判断对象的引用链是否可达,判定对象是否存活都与“引用”有关。

在JDK1.2之前,Java中的引用的定义很传统:**如果reference类型的数据中存储的数值代表的是另外一块内存的起始地址,就称这块内存代表着一个引用。**这种定义很纯粹,但是太过狭隘,一个对象在这种定义下只有被引用或者没有被引用两种状态。我们希望能描述这样一类对象:当内存空间还足够时,则能保留在内存之中;如果

在JDK1.2之后,Java对引用的概念进行了扩充,将引用分为强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Weak Reference)、虚引用(Phantom Reference),这四种引用强度依次逐渐减弱。

  • *强引用*就是指在程序代码之中普遍存在,类似“Object obj = new Object()”这类的引用,*只要强引用还存在,垃圾收集器永远不会回收掉被引用的对象。*
  • ****软引用****用来描述一些还有用,但并非必需的对象。**对于软引用关联着的对象,在系统将要发生内存溢出异常之前,将会把这些对象列进回收范围之中并进行第二次回收。如果这次回收还是没有足够的内存,才会抛出内存溢出异常。**在JDK1.2之后提供了SoftReference类来实现软引用。
  • 弱引用也是用来描述非必需对象的,但是它的强度比软引用更弱一些,****被弱引用关联的对象只能生存到下一次垃圾收集发生之前。当垃圾收集器工作时,无论当前内存是否足够,都会回收掉只被弱引用关联的的对象。****在JDK1.2之后提供了WeakReference类来实现弱引用。
  • 虚引用(幽灵引用、幻影引用),他是最弱的一种引用关系。*一个对象是否有虚引用的存在,完全不会对其生存时间构成影响,也无法通过虚引用来取得一个对象实例。*为一个对象*设置虚引用关联的唯一目的就是希望能**在这个对象被收集器回收时收到一个系统通知*。在JDK1.2之后,提供了PhantomReference类来实现虚引用。

4. 回收过程

第一次标记:使用可达性分析算法分析之后,判断对象不可达。

第二次标记:finalize()方法(上诉或者对象自我救赎的唯一方式)。该方法会被垃圾回收器去调 用,并且只会被调用一次。所以可以在finalize方法中,重新建立可达性关联,那么就完成了自我 救赎。否则被第二次标记。

3. 垃圾对象时怎么被回收的呢?

1. 复制回收算法

使用复制算法的垃圾回收步骤:

  1. 当Eden区发生垃圾回收之后,会将Eden区和Survivor其中的一块区域中的对象,复制到另一块 Survivor区域

  2. 然后将将Eden区和Survivor其中的一块区域中的对象完全清理掉。

缺点:内存分配时会浪费新生代的10%的空间。

2. 标记清除算法

最基本的算法,主要分为标记和清除2个阶段。首先标记出所有需要回收的对象,在标记完成后统一回收掉所有被标记的对象

缺点:

  1. 效率不高。
  2. 产生空间碎片。会产生大量不连续的内存碎片,会导致大对象可能无法分配,提前触发GC

3. 标记整理算法

老年代没有人担保,不能用复制回收算法。可以用标记-整理算法,标记过程仍然与“标记-清除”算法一样,然后让所有存活的对象都向一端移动,然后直接清理掉端边界以外的内存

4. 分代回收算法

当前商业虚拟机都是采用这种算法。根据对象的存活周期的不同将内存划分为几块。

  • 新生代,每次垃圾回收都有大量对象失去,选择复制算法。
  • 老年代,对象存活率高,无人进行分配担保,就必须采用标记清除或者标记整理算法

5. 内存分配担保

在JVM的内存分配时,也有这样的内存分配担保机制。就是当在新生代无法分配内存的时候,把新生代的对象转移到老生代,然后把新对象放入腾空的新生代。

4. GC方式有哪些?

minorGC

新生代的垃圾回收,很快就回收了,新生代回收的频率高

MajorGC

老年代的垃圾回收 比minorGC慢10倍

fullGC

整个JVM的垃圾回收。 整个堆(minorGC和majorGC)和方法区的垃圾回收。

  • system.gc()

  • 老年代不够用

  • 方法区不够用

  • 当新生代的对象无法被老年代担保成功时

89d5af77d4896a692cd282bc01c55de8.png

0a52b20386a562e8ac776424956673b5.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/505324.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++读取utf8文件_Node.js 进阶之 fs 文件模块学习

前言文件操作是开发过程中并不可少的一部分。Node.js 中的 fs 模块是文件操作的封装,它提供了文件读取、写入、更名、删除、遍历目录、链接等 POSIX 文件系统操作。与其它模块不同的是,fs 模块中所有的操作都提供了异步和同步的两个版本,具有 sync 后缀的…

计算机网络 --- 数据链路层中局域网和广域网

局域网 简称LAN(Local Area Network):是指在某一区域内由多台计算机互联成的计算机组,使用广播信道。 局域网的特点 覆盖的地理范围较小,只在一个相对独立的局部范围内联,如一座或集中的建筑群内。使用专…

python制作中文词云_Python如何生成词云(详解)

前言 今天教大家用wrodcloud模块来生成词云,我读取了一篇小说并生成了词云,先看一下效果图: 效果图一:效果图二:根据效果图分析的还是比较准确的,小说中的主人公就是“程理”,所以出现次数最多。…

计算机网络 --- 局域网中的以太网

以太网概述 以太网是应用最广泛的局域网,包括标准以太网(10Mbps),快速以太网(1000Mbps),千兆以太网(1000Mbps)和10G以太网,他们都符合IEEE802.3系列标准规范…

高度为5的3阶b树含有的关键字个数_数据结构要考得好,你心里要有B树

01知识框架02知识点详解1B树①定义与性质B树也叫B-树。B树是一种平衡的多分树,通常我们说m阶的B树,是二叉排序树的一种扩展,它必须满足如下条件:01每个结点最多只有m-1个关键字。02根结点最少可以只有1个关键字。03非根结点至少有…

计算机网络 --- 网络层路由算法与路由协议

路由表: 最佳路由: “最佳”只能是相对于某一种特定要求下得出的较为合理的选择而已。 路由算法的分类 静态路由算法(非自适应路由算法) 管理员手工配置路由信息。简便,可靠,在负荷稳定,拓扑…

cplex安装_Excel软件规划求解工具的安装与功能介绍

引言规划求解工具是Excel软件中自带的一个功能非常强大的加载项/工具。它能够完成包括线性规划、整数线性规划等一般规模的数学优化问题的问题求解。更重要的是,无论是在Windows操作系统下,还是苹果电脑Mac平台下,这个工具都是免费的。下面就…

计算机网络 --- 网络层IP数据报

IP数据报格式 首部 版本:IPv4/IPv6首部长度:单位是4B,最小为5。也就是说如果首部长度的四个bit的出来的数是8,那么首部长度就是8 * 4B 32B也就是32字节区分服务:指示期望获得哪种类型的服务总长度:首部数据…

线程管理(学习)

线程管理 在日常生活中,我们要完成一个大任务,一般会将它分解成多个简单、容易解决的小问题,小问题逐个被解决,大问题也就随之解决了。 在多线程操作系统中,也同样需要开发人员把一个复杂的应用分解成多个小的、可调…

imread函数_MATLAB图像处理:27:使用imtranslate函数平移图像

本示例说明如何使用imtranslate函数对图像执行平移操作。平移操作将图像在x或y方向或两者上移动指定数量的像素。将图像读入工作区。I imread(cameraman.tif);显示图像。图像的大小为256 x 256像素。默认情况下,imshow显示图像的左上角坐标为(0,0&#…

计算机网络 --- 网络层IP地址

全世界唯一的32位/4字节标识符&#xff0c;标识路由器主机的接口。 IP地址&#xff1a;&#xff1a; {<网络号><主机号>} IP编址的历史阶段 分类的IP地址子网的划分构成超网&#xff08;无分类编址方法&#xff09; 分类的IP地址 特殊IP地址 私有IP地址 网络地址…

3测试图片显示置信度_云上的移动性能测试平台

1. 功能决定现在&#xff0c;性能决定未来性能测试在移动测试领域一直是一个大难题&#xff0c;它最直观的表现是用户在前台使用 App 时的主观体验&#xff0c;然而决定体验优劣的背后&#xff0c;涉及到了许许多多的技术变迁。当我们习惯于诺基亚时&#xff0c;智能机出现了&a…

计算机网络 --- 网络层重要协议

动态IP分配协议 --- DHCP协议 主机如何获得IP地址&#xff1a; 静态配置 包括IP地址&#xff0c;子网掩码&#xff0c;默认网关 动态配置 由DHCP服务器来分配 DHCP协议&#xff1a; 动态主机配置协议DHCP是应用层协议&#xff0c;使用客户、服务器方式&#xff0c;客户端和…

java 并发_Java并发防范机制

1.背景并发程序开发不可避免地要涉及多线程、多线程协作、数据共享和线程安全等问题。在多线程并发场景下&#xff0c;由于采用数据共享的线程通信模型可能导致多个线程之间并发时相互干扰&#xff0c;影响到程序的正常逻辑、无法保证正常的结果。为了保证程序在并发环境的正确…

水晶底是什么材质_都是红酒杯,水晶的和玻璃的有什么区别?

除了看酒杯的形状外&#xff0c;材质也是我们选酒杯不可忽视的一环。酒杯材质可简单分为玻璃酒杯和水晶酒杯。那么&#xff0c;水晶酒杯和玻璃酒杯到底有何不同&#xff1f;普通玻璃杯二氧化硅是主要成分&#xff0c;价格低廉&#xff0c;容易清洗普通玻璃酒杯材质较厚&#xf…

计算机网络 --- 网络层

主要任务是把分组从源端传到目的端&#xff0c;为分组交换网上的不同主机提供通信服务。网络层的传输单位是数据报。&#xff08;分组是把数据报进行切割形成&#xff09; 网络层主要功能 路由选择与分组转发异构网络互联拥塞控制 如果所有结点都来不及接收分组&#xff0…

mac 串口调试工具_MACamp;串口调试

上一篇文章讲了Mac下进行stm32开发wlzz&#xff1a;Mac下stm32开发(clion)​zhuanlan.zhihu.com不可避免的遇到了串口调试的问题,发现mac下进行串口调试还真的不太容易。下了不少网上的软件,发现都不是特别好用,有很多已经不支持现在的macos系统版本了。于是在CLion下搜索了一下…

golang atomic load 性能_设计模式之Golang单例模式

今天给大家讲下什么是单例模式&#xff0c;以及在Go语言中如何用正确的姿势实现它。其实单例模式是一种在平时开发中经常用到的软件设计模式。在设计模式结构中&#xff0c;其核心是只包含一个被称为单例的特殊类。通过单例模式可以确保系统中一个类只有一个实例&#xff0c;且…

计算机网络 --- 传输层

传输层概述 传输层是只有主机才有的层次&#xff08;路由器没有&#xff09;&#xff0c;为应用层提供通信服务&#xff0c;使用网络层的服务 传输层的功能 传输层提供进程与进程之间的逻辑通信&#xff08;网络层提供主机之间的逻辑通信&#xff09;。复用和分用传输层对收…

手机相机里面的m_荣耀V30 PRO详细评测:Matrix Camera相机矩阵开启5G视频时代

【IT168 评测】随着手机摄像头的配置越来越高&#xff0c;手机上已经能实现不俗的拍照效果&#xff0c;甚至超越了数码相机(DC)成为了人们最常用的拍照工具。进入今年的下半年&#xff0c;随着5G的商用&#xff0c;手机厂商对于手机的摄像头功能优化已经不局限于拍照&#xff0…