java---闲谈GC

java 闲谈GC

写这篇文章之前,我想从栈内存,堆内存,和方法区来阐述GC机制,如果能和多线程挂上钩便是好极了,但是在JVM就不做过多的阐述,毕竟现在能力暂时不会涉及到JVM调优的水平

栈内存:我们日常定义基本数据类型,数组的引用,和引用数据类型便会在上面,还有方法运行的时候的局部变量,就是前面所说的那些日常定义
堆内存:我们日常new对象实例和数组实例的时候,便是在这个上面new一段内存进行存储,但是被final修饰之后的变量也好,常量也好,都会在堆内存中
运行流程
两者回收上的区别:栈内存都是定长,按顺序来存储的,所以不存在GC回收(就像多米诺骨牌一样);但是在堆内存中,就随机分配位置,且是不定长的,所以需要进行GC回收

接下来专心从栈上面说GC:
首先我们new出来一个对象的实例,这里我打比方来说吧,这时候他是个婴儿(新生代),婴儿出生的时候会在伊甸园里,伊甸园就是一个Eden(内存占比最大,其余两个稍小),然后进行一个 Minor gc,会有生还者,会有一个穷爸爸和一个富爸爸各自拎回家(from survivor region和to survivor region),每经过一次minor GC/Full GC(何时进行Full GC,从)的时候,这个对象就会长一岁,直到他十五岁的时候,就会迈入老生代,或者当survivor中对象的内存和超过一半的时候,会将survivor中超过平均年龄的,按从大到小移到老生代中。而老生代的对象,一般情况下都不会被GC。
在这里插入图片描述
GC怎么确定垃圾?
1、即一个对象如果没有任何与之关联的引用,即他们的引用计数都不为 0,则说明对象不太可能再被用到,那么这个对象就是可回收对象。
2、gc确定一个对象没有使用的途径的次数达到两次以上,那么这个对象就是可回收对象

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
谢谢左右网友的建议!!!
欢迎各位码农提出疑问,一起踏上填坑之路!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值