GC相关札记

各位朋友自上次结尾续集开始,我想把接下来的我对GC相关理解讲下,,,,,,这里可能会借鉴到各位老师的术语 ,,小生膜拜,,,在此谢过请不要介意。
GC 名出其意 Garbage Collection (垃圾收集),也是本人学习,或者作为JAVA工作者的欣慰之处 ,为啥呢 因为这也是其比较的优势之处,在C语言范畴中是需要程序员自己手动解除对象指针关系的而javaGC是自动执行的,很多大师命名了一个后台进程来约束GC,
这也是线程临界资源解决并发的一种方式(除此之外还有使用数据副本—{点一下—换言之就是个每个使用数据的线程分配一个独立的副本而不影响对临界变量的修改}和线程独立等方式),进程说白了就是程序进程:
一个计算机程序的运行实例,包含了需要执行的指令;
有自己的独立地址空间,包含程序内容和数据;不同进程的地址空间是互相隔离的;
, 最后执不执行说白了还得看人家心情好不好——==!
说到这里大家应该就知道了GC和我们是没有直接链接的—– 那么说到GC大家会想到一个相关的概念,也就是臭名昭著的一个词(我的名字叫内存泄漏),,,所谓内存泄漏就是无用AND可达对象占用内存空间但是没有被垃圾收集,这样会间接消耗系统资源——-,
,那么这样就形成了内存泄漏了,其发生虽然在所难免但是我们可以有效地预防和解决————-
这里说明下两个概念
(1)无用:指存在于HEAP中的对象没有被垃圾回收暂用程序资源的对象,

(2)可达:这里指的是对象之间的相互引用但是与根树是不可达的,,,

这里有个概念我想说一下为了方便理解GC 的原理,有向图机制:也就是下面这个图—有个主线程可以说根节点发出两个分支对象引用,把引用2指向对象1,那么对象2没有被引用换句话说没有可达根节点的途径,那么就形成了不可达的可被垃圾回收的状态。

画个图 把
这里写图片描述

然后讲到这里还有一个不是很有关系的问题就是,静态对象不用会不会背垃圾回收,我的答案是不会,当然也不是我测的啦(不过我讲一下测的过程大概是:在循环语句中不断创建单例对象,观察Xmx初始化内存大小的变化来判断,因为对象背回收可使用内存会加大哦,一般单例占用6M如果结果大于6M说明没有垃圾回收该对象!),,,,,==!好尴尬 !!!!我看过很多专家的见解和分析总结出了我的想法—–
原因大概是这样———垃圾收集的算法(ROOT搜索)—和对象被使用时间长短无关而是和其对象是不是“活”的有关,所谓活的,,也就是
对任何“活”的对象,一定能最终追溯到其存活在堆栈或静态存储区之中的引用,说白了就是与可达对象 ,根搜索算法是HOTSTOP-JVM所使用的搜索算法,,,,,,,,,,通过一系列名为根(GC Roots)的引用作为起点,从这些根开始搜索,经过一系列的路径,如果可以到达java堆中的对象,那么这个对象就是“活”的,是不可回收的。可以作为根的对象有:
(1)虚拟机栈中的引用的对象。
(2)类静态属性引用的对象。
(3)方法区常量池常量引用的对象。
好像还有个忘了——大体就是这样—–今天就写到这下次有机会继续–!!

以上内容有些规范词汇来自前辈们和老师的文摘,纯属引用,,,,,在此谢过

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值