深入分析GC处理

GC在Java中的核心功能就是对内存中的对象的分配与回收,所以对于GC的理解不要局限于只是进行垃圾收集,还应该知道GC决定了内存的分配
最常见的的情况时当创建一个对象后,GC就会监视这个对象的地址,大小和状态。对象的引用会保存在栈内存(Stack)中,而对象的具体内容会保存在堆内存(Heap)中。当GC监测到一个堆中的某个对象不再被栈所引用时,就会不定期的对这个堆内存中保存的对象进行回收。有了GC的帮助,开发者不用再考虑内存回收的事情,GC也可以最大限度地帮助开发者防止内存泄漏。
在Java中针对垃圾收集也提供了多种不同的处理分类。
(1)引用计数:一个实例化对象,如果程序使用了这个引用对象,引用计数加1,当一个对象使用完毕,引用计数减1,当引用计数为0时,则可以回收。
(2)跟踪收集:从root set(包括当前正在执行的线程,全局或者静态变量,JVM)开始扫描有引用的对象,如果某个对象不可到达,则说明这个对象已经死亡,则GC可以对其进行回收。也就是说:如果A对象引用了B对象的内存,那么虚拟机会记住这个引用路径,而如果一个对象没有在路径图中,则就会被回收。
(3)基于对象跟踪的分代增量收集:所有的对象回收要根据堆内存的结构划分来进行收集,具体如下:
①基于对象跟踪:是由跟踪收集发展而来,分代是指对堆进行了合理的划分,JVM将整个堆分为三代:
A:YougGen(新生代,使用Minor GC回收):YougGen区里面的对象的生命周期比较短,GC对这些对象进行回收的时候采用复制拷贝算法。
I- youg:又分为eden,survivorl(from space),survivor2(to space)。eden是在每个对象创建的时候才分配的空间,当eden无法分配时,则会自动触发一次Minor GC。当GC每次执行时都会将eden空间中存活的对象和survivorl中的对象拷贝到survivor2中,此时eden和survivor1的空间内容将被清空。当GC执行下次回收时将eden和survivor2中的对象拷贝到surivorl中,同时会清空eden和survivor2空间。按照此类的顺序依次执行,经过数次回收将依然存活的对象复制到OldGen(年老代)区。
B:OldGen(年老代,使用Major GC回收):当对象从YoungGen保存到OldGEn后,会监测OldGen的剩余空间十分大于要晋升对象的大小,此时会有以下两种处理方式。
I- 如果小于要保存的对象,则直接进行一次 Full GC(对整个堆进行扫描个回收,但是Major GC除外),这样就可以让OldGen腾出更多的空间。然后执行Minor GC,把YoungGen空间的对象复制到OldGen空间。
I- 如果大于要保存的对象,则会根据条件(HandlePromotionFailure配置:是否能担保分配失败内存,即整个OldGen空间不足,而YoungGen空间中Eden和Survivor对象都存活的极端情况。)进行Minor GC和Full GC回收。
C,PermGen(持久区):要存放加载进来的类信息,包括方法,属性,对象池等,满了之后可能引起Out Of Memory错误。
MetaSpace(元空间):持久化的替换者,直接适用主机内存进行存储。
增量收集:不是每一次全波手机,而是累计的增量收集。
在下篇我会用图解的方式来解释这一大篇文章,结合图像更好的对GC的理解~~~~

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353

推荐阅读更多精彩内容