课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
垃圾回收在程序员学习java编程开发语言的时候是需要重点掌握的一个编程知识,而今天我们就通过案例分析来了解一下,垃圾回收的概念与衡量指标。
垃圾回收是一种自动的内存管理形式,垃圾收集器是内存管理系统的重要组件,内存分配器会负责在堆上申请内存,而垃圾收集器会释放不再被用户程序使用的对象。谈到垃圾回收,很多人的一反应可能都是暂停程序(stop-the-world、STW)和垃圾回收暂停(GCPause),垃圾回收确实会带来STW,但是这不是垃圾回收的全部,本节将详细介绍垃圾回收以及垃圾收集器的相关概念和理论。
什么是垃圾
在深入分析垃圾回收之前,我们需要先明确垃圾回收中垃圾的定义,明确定义能够帮助我们更精确地理解垃圾回收解决的问题以及它的职责。计算机科学中的垃圾包括对象、数据和计算机系统中的其他的内存区域,这些数据不会在未来的计算中使用,因为内存资源是有限的,所以我们需要将这些垃圾占用的内存交还回堆并在未来复用。
垃圾可以分成语义垃圾和语法垃圾两种,*语义垃圾(SemanticGarbage)*是计算机程序中永远不会被程序访问到的对象或者数据;*语法垃圾(SyntacticGarbage)*是计算机程序内存空间中从根对象无法达到(Unreachable)的对象或者数据。
语义垃圾是不会被使用的的对象,可能包括废弃的内存、不使用的变量,垃圾收集器无法解决程序中语义垃圾的问题,我们需要通过编译器来一部分语义垃圾。语法垃圾是在对象图中不能从根节点达到的对象,所以语法垃圾在一般情况下都是语义垃圾。
堆使用效率
堆的使用效率也是衡量垃圾收集器的重要指标。为了能够标识垃圾,我们需要在内存空间中引入包含特定信息的对象头,这些对象头都是垃圾收集器带来的额外开销,正如网络带宽可能不是终的下载速度,协议头和校验码的传输会占用网络带宽,对象头的大小终也会影响堆内存的使用效率;除了对象头之外,堆在使用过程中出现的碎片也会影响内存的使用效率,为了保证内存的对齐,我们会在内存中留下很多缝隙,这些缝隙也是内存管理带来的开销。
访问局部性
访问的局部性是我们在讨论内存管理时不得不谈的话题,空间的局部性是指处理器在短时间内总会重复地访问同一片或者相邻的内存区域,操作系统会以内存页为单位管理内存空间,在理想情况下,合理的内存布局可以使得垃圾收集器和应用程序都能充分地利用空间局部性提高程序的执行效率。
希望这辈子,最让你无悔的事情就是来达内学习!学习向来不是件易事,但无论过程多么艰难,希望你依然热爱生活,热爱学习!永远记得,达内将与你一同前行!现在扫码,立即领取万元课程礼包,助力0基础快速入行,为你梳理行业必备技能,全方位了解岗位发展前景!
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请在707945861群中学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。