文章目录

  • 一、GC是什么?
  • 二、为什么要GC?
  • 三、怎么GC?

一、GC是什么?

GC英文全称为Garbage Collection,即垃圾回收。
Java中的GC就是对内存的GC。
Java的内存管理实际上就是对象的管理,其中包括对象的分配和释放。
我们知道对象的分配,程序员可以通过new关键字,Class的new-Instance方法等来显示的分配;而对象的释放,程序员不能实时的进行释放,这就需要GC来完成。

二、为什么要GC?

因为内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃。因此,Java提供了GC功能。该功能可以自动监测对象是否超过作用域从而判断是否需要回收内存。
GC有效的防止了内存泄漏,可以有效的使用可以使用的内存。
对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是"可达的",哪些对象是"不可达的".当GC确定一些对象为"不可达"时,GC就有责任回收这些内存空间。
注:判断对象"不可达",一般有两种方法,即引用计数法和可达性分析法。

三、怎么GC?

当前商业Java虚拟机都采用分代收集的垃圾回收算法,即将对象的内存周期划分为几块,按照每块的情况采取不同的垃圾回收算法。

  • 一般是把Java堆分为新生代和老年代。

    • 年轻代:年轻代用来存放新近创建的对象,年轻代中存在的对象是死亡非常快的。存在朝生夕死的情况。
    • 老年代:老年代中存放的对象是存活了很久的对象。
  • 垃圾回收算法分为三种,分别为标记-清除算法,复制算法,标记-整理算法(注:这三种算法本文只是简单介绍,详细信息可以参考Java 垃圾回收机制与几种垃圾回收算法)。

    • 标记-清除算法:标记无用对象,然后对其进行清除回收。
    • 复制算法:将内存区域划分为大小相等的两部分,每次只使用一部分,当该部分用完后将其存活的对象移至另一部分,并把该部分内存全部清除。
    • 标记-整理算法:标记无用对象,让所有存活的对象都向内存一端移动,然后清除掉存活对象边界外的内存区域。

Java中的GC简单介绍相关推荐

  1. java中的List简单介绍

    List是Java中比较常用的集合类,关于List接口有很多实现类,本文就来简单介绍下其中几个重点的实现ArrayList.LinkedList和Vector之间的关系和区别. List 是一个接口, ...

  2. Java中UUID的简单介绍

    一.什么是UUID? UUID全称:Universally Unique Identifier,即通用唯一识别码. UUID是由一组32位数的16进制数字所构成,UUID的标准型式包含32个16进制数 ...

  3. django中使用celery简单介绍

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 本章节我们重点在于实现,如何存储任务的结果. 我们将任务函数改为: from celery_demo.celery im ...

  4. Java基础-JAVA中常见的数据结构介绍

    Java基础-JAVA中常见的数据结构介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是数据结构 答:数据结构是指数据存储的组织方式.大致上分为线性表.栈(Stack) ...

  5. php simpledateformat,Java中SimpleDateFormat的用法介绍(代码示例)

    本篇文章给大家带来的内容是关于Java中SimpleDateFormat的用法介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 1.为什么要使用SimpleDateFo ...

  6. java中equals函数所在的类,重写Java中的equals方法介绍

    Java中,只有8种基本类型不是对象,例如:4种整形类型(byte, short, int,long),2种浮点类型(flout, double),boolean, char不是对象,其他的所有类型, ...

  7. JAVA中常用接口的介绍及使用示例 java lang Comparable

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! JAVA ...

  8. Java虚拟机内存模型简单介绍

    一.虚拟机 同样的java代码在不同平台生成的机器码肯定是不一样的,因为不同的操作系统底层的硬件指令集是不同的. 不知道同学们还记不记得,在下载jdk的时候,我们在oracle官网,基于不同的操作系统 ...

  9. JMS(Java消息服务)(Activemq简单介绍)

    是什么? JMS(java消息服务)是规范,它定义了一些规则,一些接口.具体实现由各种做这个产品的厂家或开源组织来实现. 为什么? 在JMS还没有诞生前,每个企业都会有自己的一套内部消息系统,比如项目 ...

最新文章

  1. golang日志服务器_日志系统 | log/syslog (log) – Go 中文开发手册 - Break易站
  2. [Java]Thinking in Java 练习2.10
  3. leetcode算法题--二进制求和
  4. 虚拟×××和虚拟防火墙 (VNN)
  5. 基于RESTful标准的Web Api
  6. [2021-09-04 AtCoder Beginner Contest 217] 题解
  7. js for in 获得遍历数组索引和对象属性
  8. vscode在windows10系统下进行go语言编程(无法代码提示)
  9. flutter安装教程(win7)
  10. 数据分析的五个阶段及价值
  11. 1006 小明与隔壁老王之间不得不说的故事(简单)
  12. 06 is和==的区别 encode()编码 decode()解码
  13. JAVA对象,直接新建跟反射新建,有区别
  14. 讨教大学|FMEA成功实施的关键是什么?
  15. linux 扫描开放的端口命令,在Linux中,如何检查开放的端口(扫描)
  16. 7月SCI/SSCI期刊变动,警惕这5本被剔除
  17. 明天起,鄂尔多斯这些地方要停电!涉及伊旗、达旗等6个旗区
  18. 仅10天修复3个零日漏洞 苹果是真的拼了命
  19. 正确认高分子PEG:识MTA mPEG,Myristic-acid PEG,肉豆蔻酸 PEG,PEG改性肉豆蔻酸
  20. 【Arduino】mega2560 驱动grove 三色水墨屏

热门文章

  1. 【转】前端——实用UI组件库
  2. 77.Oozie的HA启用
  3. 干货(附源代码) | 爬取一万条b站评论,分析9.7分的新番凭啥这么火?
  4. MATLAB秦九韶多项式求值算法的原理和迭代法求解的近似数值方法。
  5. 对话架构师:亿级短视频社交「美拍」架构实战
  6. 微信小程序实时日志wx.getRealtimeLogManager——远程监控小程序日志
  7. 用python实现音乐可视化
  8. 有关培养小孩的自制力
  9. Apache服务器安装SSL证书
  10. 数据结构—图(Part Ⅱ)—最小生成树 最短路径