首页 > 其他分享 >第十四章 垃圾回收概述

第十四章 垃圾回收概述

时间:2022-08-25 08:33:56浏览次数:66  
标签:开发人员 回收 pBridge GC 垃圾 第十四章 概述 内存

孤独就是你的隧道阶段,你能不能把它挖通,你走过一次隧道之后,你以后面临着新的生活的黑暗区的时候,你心里就有一种力量去穿越它

1.什么是垃圾

  • 垃圾是指在运行程序中没有任何指针指向的对象,这个对象就是需要被回收的垃圾。

  • 如果不及时对内存中的垃圾进行清理,那么,这些垃圾对象所占的内存空间会一直保留到应用程序结束,被保留的空间无法被其它对象使用,甚至可能导致内存溢出。

2.为什么需要GC

  • 对于高级语言来说,一个基本认知是如果不进行垃圾回收,内存迟早都会被消耗完,因为不断地分配内存空间而不进行回收,就好像不停地生产生活垃圾而从来不打扫一样。

  • 除了释放没用的对象,垃圾回收也可以清除内存里的记录碎片。碎片整理将所占用的堆内存移到堆的一端,以便JVM将整理出的内存分配给新的对象。

  • 随着应用程序所应付的业务越来越庞大、复杂,用户越来越多,没有GC就不能保证应用程序的正常运行。而经常造成STWGC又跟不上实际的需求,所以才会不断地尝试对GC的优化。

3.早期垃圾回收

  • 在早期的C/C++时代,垃圾回收基本上是手工进行的。开发人员可以使用new关键字进行内存申请,并使用delete关键字进行内存释放。比如以下代码:

MibBridge *pBridge = new cmBaseGroupBridge();
//如果注册失败,使用Delete释放该对象所占内存区域
if (pBridge->Register(kDestroy) != NO ERROR)
delete pBridge;
  • 这种方式可以灵活控制内存释放的时间,但是会给开发人员带来频繁申请和释放内存的管理负担。倘若有一处内存区间由于程序员编码的问题忘记被回收,那么就会产生内存泄漏,垃圾对象永远无法被清除,随着系统运行时间的不断增长,垃圾对象所耗内存可能持续上升,直到出现内存溢出并造成应用程序崩溃。

  • 在有了垃圾回收机制后,上述代码极有可能变成这样:

MibBridge *pBridge = new cmBaseGroupBridge(); 
pBridge->Register(kDestroy);
  • 现在,除了Java以外,C#、Python、Ruby等语言都使用了自动垃圾回收的思想,也是未来发展趋势,可以说这种自动化的内存分配和来及回收方式已经成为了线代开发语言必备的标准。

4.Java垃圾回收机制

  • 自动内存管理,无需开发人员手动参与的分配与回收,这样降低内存泄漏和内存溢出的风险。

  • 没有垃圾回收器,java也会和cpp一样,各种悬垂指针、野指针、泄漏问题让你头疼不已。

弊端:

  • 对于Java开发人员而言,自动内存管理就像是一个黑匣子,如果过度依赖于“自动”,那么这将会是一场灾难,最严重的就会弱化Java开发人员在程序出现内存溢出时定位问题和解决问题的能力。

  • 此时,了解JVM的自动内存分配和内存回收原理就显得非常重要,只有在真正了解JVM是如何管理内存后,我们才能在遇见outofMemoryError时,快速地根据错误异常日志定位问题和解决问题。

  • 当需要排查各种内存溢出、内存泄漏问题时,当垃圾收集成为系统达到更高并发量的瓶颈时,我们就必须对这些“自动化”的技术实施必要的监控和调节。

5.GC主要关注的区域

GC主要关注于方法区和堆中的垃圾回收

  • 垃圾回收器可以对年轻代回收,也可以对老年代进行回收,甚至是全栈和方法区的回收。

    • 其中,Java堆是垃圾收集器的工作重点

  • 从次数上来讲

    • 频繁收集Young区

    • 较少收集Old区

    • 基本不收集Perm区(元空间)

标签:开发人员,回收,pBridge,GC,垃圾,第十四章,概述,内存
From: https://www.cnblogs.com/l12138h/p/16616225.html

相关文章

  • windows 清理c盘垃圾
    windows清理c盘垃圾电脑去年买的,一年时间内C盘100G,占用了97%,软件经常报磁盘不足,但是找不到是哪些文件占用了这么多,很是苦恼。百度搜到的一大堆文档都是水分粘贴复制,几乎......
  • (一)MySQL概述
    一、概述SQL有两个重要的标准,分别是SQL92和SQL99,它们分别代表了92年和99年颁布的SQL标准。E-R(实体-关系)图它是我们用来描述现实世界的概念模型,在这个模型中有3个要素:实......
  • 案例分析&环境搭建、maven概述
    案例分析&环境搭建案例需求:1,提供index.html页面,页面中有一个省份下拉列表2.当页面加载完成后发送ajax请求,加载所有省份   maven概述maven是什么项目管理工具M......
  • DSA概述
    DSA:DataStructure+Algorithm课程清华大学邓俊辉数据结构与算法https://dsa.cs.tsinghua.edu.cn/~deng/ds/dsacpp/概论什么是计算评判DSA优劣的参照(直尺)度量DS......
  • MySQL学习(1)---MySQL概述
    什么是数据库概述数据库(Database)是长期存储在计算机内有组织、大量、共享的数据集合。它可以供各种用户共享,具有最小冗余度和较高的数据独立性。数据库管理系统DBMS(Da......
  • Stream流-流式思想概述和获取流
    流式思想概述整体来看,流式思想类似于工厂车间的“生产流水线”。  当需要对多个元素进行操作(特别是多步操作)的时候,考虑到性能及便利性,我们应该首先拼好一个“模型”......
  • maven概述和maven依赖管理的概念
    maven概述什么是MavenApacheMaven是一个软件工程管理和整合工具。Maven是一个采用纯Java编写(跨平台)的开源项目管理工具,Maven采用了一种被称之为对象模型(POM:Pro......
  • maven概述以及maven依赖管理的概念和一键构建理念
    Maven概述Maven是一个项目管理工具,它包含了一个项目对象模型(POM:ProjectObjectModel),一组标准集合,一个项目生命周期(ProjectLifeCycle),一个依赖管理系统(Dependencyma......
  • day-01-项目概述及环境搭建
    1、什么是SaaS平台,它有什么特点?SaaS平台:供应商将应用软件统一部署在自己的服务器上,客户可以根据工作实际需求,通过互联网向厂商订购所需的应用软件服务,按照订购服务的多少......
  • redis的概述以及redis的下载与安装
    redis的概述概念:redis是一款高性能的NOSQL系列的非关系型数据库关系型数据库:1、数据之间有关联关系2、数据存储在硬盘文件中非关系型数据库:1、数据......