深入理解java虚拟机jvm之GC垃圾回收(2)

最近看了一些java基础、博客以及《深入理解java虚拟机》等文章,生活之余就想着记录下来,也算是对知识的总结。

=======================================================================
本系列文章将从,jvm的基本概念、GC、优化配置,线程安全等方面阐述。

 =======================================================================

本人这里只提供自己学习的思路,就不详细讲解了,以免误人子弟

目录

1.垃圾回收算法

2.如何区分垃圾

3.垃圾如何分代

4.什么情况下触发垃圾回收

5.jvm调优

总结:

拓扑图​


1.垃圾回收算法

按照基本回收策略分

        1.引用计数

        2.标记-清除

        3.复制

        4.标记-整理

按分区对待的方式分

        增量收集、分代收集

按系统进程分

        串行收集、并行收集、并发收集、

2.如何区分垃圾/怎么判断它是垃圾

        垃圾回收的起点是一些跟对象(java栈、静态变量、寄存器、、、)。

        因为程序运行是在栈中进行的,一个栈对应一个线程,所以要获取哪些对象正在被使用,需要从栈中开始。

          判断垃圾的算法:从程序运行的根节点触发,遍历整个对象,查找存活的对象。以栈或者寄存器中的引用为起点,我们可以找到堆中的对象,又从这些对象找到堆中其他对象的引用,这种引用逐步扩展,最终以null引用或者基本类型结束,这样就形成了一颗以java栈中引用所对应的对象为根节点的一颗对象树,如果栈中有多个引用,则最终会形成多颗对象树。在这些对象树上的对象,都是当前系统运行所需要的对象,不能被垃圾回收。而其他剩余对象,则可以视为无法被引用到的对象,可以被当作垃圾回收。        

3.垃圾为什么要分代

        分代的垃圾回收策略是基于:不同的对象的声明周期是不一样的。因此,不同生命周期的对象可以采取不同的手机方式,以便提高回收效率。

        虚拟机中划分为:年轻代(Young Generation)、年老代(Old Generation) 、持久代(Permanent Generation)

        分代的目的:因为垃圾回收是对整个堆空间进行回收,如果不进行分代,那么每次都需要遍历所有的存活对象,显而易见是耗时的,而分代之后,可以把不同生命周期的对象放在不同代area上,再对不同代采取不同的垃圾回收方式,达到分而治之的思想。

 

4.什么情况下触发垃圾回收

        GC有两种类型:Scavenge Gc   、 Full Gc。 

5.jvm调优

        下面配图。

总结:

1.垃圾回收是对整个堆空间进行回收,栈因为每个线程都有一个栈,所以线程结束,栈空间(基本数据类型)就回收了

2.我们要区分谁是垃圾(以栈或者寄存器中的引用为起点,我们可以找到堆中的对象)基于垃圾回收算法

 3.因为不同的对象的声明周期是不一样的,所以我们采用分代,不同代采用不同的方式进行回收垃圾,高效。

4.垃圾回收的时机

        

拓扑图

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值