什么是垃圾(Garbage)?

  • 垃圾是指在运行程序中没有任何指针指向的对象,这个对象就是需要被回收的垃圾
  • 如果不及时对内存中的垃圾进行清理,那么,这些垃圾对象所占的内存空间会一致保留到应用程序结束,被保留的空间无法被其他对象使用。甚至可能导致内存溢出。

为什么需要GC?

  • 对于高级语言来说,一个基本认知是如果不进行垃圾回收,内存迟早都会被消耗完,因为不断地分配内存空间而不进行回收,就好像不停地生产生活垃圾而从来不打扫一样
  • 除了释放没用的对象,垃圾回收也可以清除内存里的记录碎片。碎片整理将所占用的堆内存移到堆的一端,以便JVM将整理出的内存分配给新的对象
  • 随着应用程序所应付的业务越来越大、复杂,用户越来越多,没有GC就不能保证应用程序的正常进行。而经常造成STW的GC又跟不上实际的需求,所以才会不断的尝试对GC进行优化

早期垃圾回收

  • 在早期的C/C++时代,垃圾回收基本上是手工进行的,开发人员可以使用new关键字进行内存申请,并使用delete关键字进行内存释放
  • 这种方式可以灵活控制内存释放的时间,但是会给开发人员带来频繁申请和释放内存的管理负担。倘若有一处内存区间由于程序员编码的问题忘记被回收,那么就会产生内存泄露,垃圾对象永远无法被清除,随着系统运行时间的不断增长,垃圾对象所耗内存可能持续上升,知道出现内存溢出并造成应用程序崩溃
  • 现在除了Java之外,C#、python、Ruby等语言都使用了自动垃圾回收的思想,也是未来发展趋势。这种自动化的内存分配和垃圾回收的方式已经成为现代开发语言的必备的标准

Java垃圾回收机制

  • 自动内存管理,无需开发人员手动参与内存的分配与回收,这样降低内存泄露和内存溢出的风险(没有垃圾回收器,Java也会和cpp一样,各种悬垂指针、野指针,泄露问题)
  • 自动内存管理机制,将程序员重繁重的内存管理中释放出来,可以更专心的专注于业务开发

可能面临的担忧

  • 对于Java开发人员而言,自动内存管理就像是一个黑匣子,如果过度依赖于自动,那么这将会是一场灾难,最严重的的就会弱化Java开发人员在程序出现内存溢出时定位问题和解决问题的能力
  • 只有真正了解JVM是如何管理内存的,才能在遇见OutOfMemoryError时,快速地根据错误异常日志定位问题和解决问题
  • 当需要排查各种内存溢出、内存泄露问题时,当垃圾收集成为系统达到更高并发量的瓶颈时,就必须对这些“自动化”的技术实施必要的监控和调节

应重点关注哪些区域的回收?

  • 垃圾回收器可以对年轻代回收,也可以对老年代回收,甚至是全堆和方法区的回收(其中,Java堆是垃圾收集器的工作重点)
  • 从次数上讲:
    1. 频繁收集Young区
    2. 较少收集Old区
    3. 基本不动Perm区(或元空间)

JVM:垃圾回收概述相关推荐

  1. JVM 垃圾回收概述

    垃圾回收的概念 1-什么是垃圾 垃圾收集,不是Java语言的伴生产物.早在1960年,第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生. 关于垃圾收集有三个经典问题: 哪些内存需要回收? 什 ...

  2. JVM 垃圾回收算法与ART CC回收器实现概述

    前言 在作者的上一篇文章<Android R常见GC类型与问题案例>中,对Demo应用的Heap堆结构与Space类型及相对应内存分配算法做了简要的探究,同时对Android R机器运行中 ...

  3. 【JVM进阶之路】五:垃圾回收概述和对象回收判定

    1.垃圾收集概述 垃圾收集(Garbage Collection,简称GC)简单说,就是要干三件事: 哪些内存需要回收? 什么时候回收? 如何回收? 在Java的内存区域中: 程序计数器.虚拟机栈.本 ...

  4. JVM—7—垃圾回收概述及相关算法

    文章目录 一.垃圾回收概述 1.概念 2.什么是垃圾 2.1 什么是垃圾? 2.2 磁盘碎片整理 2.3 大厂面试题 3.为什么需要GC 4.早期垃圾回收 5.Java垃圾回收机制 5.1 优点 5. ...

  5. JVM 垃圾回收算法 -可达性分析算法!!!高频面试!!!

    前言:学习JVM,那么不可避免的要去了解JVM相关的垃圾回收算法,本文只是讲了讲了可达性分析算法,至于标记-清除.标记-复制,标记-整理,分代收集等等算法,会在近两天的文章中陆续更新出来. 很喜欢一句 ...

  6. 第 14 章 垃圾回收概述

    第 14 章 垃圾回收概述 1.垃圾收集面试题 回顾 JVM 学习路线 关于垃圾收集 Java 和 C++语言的区别,就在于垃圾收集技术和内存动态分配上,C语言没有垃圾收集技术,需要我们手动的收集. ...

  7. 第 13 章 一 垃圾回收概述

    第 13 章 垃圾回收概述 1.垃圾收集面试题 回顾 JVM 学习路线 关于垃圾收集 Java 和 C++语言的区别,就在于垃圾收集技术和内存动态分配上,C语言没有垃圾收集技术,需要我们手动的收集. ...

  8. 第14章 垃圾回收概述

    第14章 垃圾回收概述 来自尚硅谷宋红康老师讲解的JVM:bilibili链接 1 什么是垃圾 Java = (C++)– 垃圾收集,不是Java语言的伴生产物.早在1960年,第一门开始使用内存动态 ...

  9. JVM3--垃圾回收机制:垃圾回收概述、垃圾回收算法及分类

    一.垃圾回收概述 1.垃圾对象:运行程序中没有任何指针指向的对象 2.垃圾回收区域: 方法区+堆空间        频繁回收Young区        较少回收old区        基本不动Perm ...

  10. 第十四章 - 垃圾回收概述

    第十四章 - 垃圾回收概述 文章目录 第十四章 - 垃圾回收概述 1.什么是垃圾 1.1 **大厂面试题** 1.2 什么是垃圾? 2.为什么需要GC 3.早期垃圾回收 4.Java垃圾回收机制 担忧 ...

最新文章

  1. Objective-C property属性解析
  2. 深度学习(计算机视觉)面试中问题(一)
  3. MySQL删除存储过程
  4. 如何使用 Kubernetes 监测定位慢调用
  5. java void eat_java匿名内部类
  6. BZOJ2659: [Beijing wc2012]算不出的算式
  7. web前端期末大作业--响应式汽车租赁网页设计--(HTML+CSS+JavaScript)实现
  8. PPT图片模板等素材打包下载
  9. 智能物联网系统安全与防御【会议】
  10. Linux(一):VMware安装出现的问题
  11. 【TensorFlow-windows】(七) CNN之VGG-net的测试
  12. C++ 对象模型学习记录(3)--- 第1章 关于对象(未完)
  13. PHP——下载图片到本地代码
  14. 解决在使用pip进行安装时的Could not install packages due to an EnvironmentError的问题
  15. Java集成openCV实现图片背景切换
  16. native方法在java中介绍及使用图解
  17. 移动端后台管理系统框架
  18. 回顾过去。。展望未来
  19. PPT超链接字体颜色修改方法
  20. Windows10 mysql解决MySQL服务无法启动 系统出错 发生系统错误 1067

热门文章

  1. 文件服务器搭建 xp,xp文件服务器搭建
  2. 数值运算python-Python : 数值以及数值运算
  3. python的csv模块的write_rows_Python3使用csv模块csv.writer().writerow()保存csv文件,产生空行的问题...
  4. python垂直输出hello_python - 我如何获得直方图以垂直输出数据? - SO中文参考 - www.soinside.com...
  5. android+对比标签选择顺序是否正确的是,2019年Android题库含答案.docx
  6. poj3259(SPFA算法)
  7. CF703D Mishka and Interesting sum(求区间出现次数偶数次数的异或和)
  8. mysql+在服务中无法启动_MySQL服务初始化后无法启动
  9. (2017)第八届蓝桥杯大赛个人赛省赛(软件类) C/C++ 大学A组 题解(第八题包子凑数)
  10. C - 食物链 POJ - 1182