JavaGC垃圾处理

Java的GC一般是在JVM的堆上进行的,Java的堆中存放了大量的对象实例,所以JavaGC也叫GC堆。

Java将内存区划分为:

新生代(Young Generation/New)

    Eden Space

    From Survivor/Survivor 0

    To Survivor/Survivor 1

老年代(Tenured Generation/Old)

永久代(一般指方法区和常量池,一般情况下永久代在虚拟机运行时就能确定大小的,但是一些框架可能会动态生成类信息就会导致永久代越来越大)

新生代要如此划分是因为新生代使用的GC算法是复制收集算法。这种算法效率较高,而GC主要是发生在对象经常消亡的新生代,因此新生代适合使用这种复制收集算法。由于有一个假设:在一次新生代的GC(Minor GC)后大部分的对象占用的内存都会被回收,因此留存的放置GC后仍然活的对象的空间就比较小了。这个留存的空间就是Survivor space:From Survivor或To Survivor。这两个Survivor空间是一样大小的。例如,新生代大小是10M(Xmn10M),那么缺省情况下(-XX:SurvivorRatio=8),Eden Space 是8M,From和To都是1M。

新生代要如此划分是因为新生代使用的GC算法是复制收集算法。这种算法效率较高,而GC主要是发生在对象经常消亡的新生代,因此新生代适合使用这种复制收集算法。由于有一个假设:在一次新生代的GC(Minor GC)后大部分的对象占用的内存都会被回收,因此留存的放置GC后仍然活的对象的空间就比较小了。这个留存的空间就是Survivor space:From Survivor或To Survivor。这两个Survivor空间是一样大小的。例如,新生代大小是10M(Xmn10M),那么缺省情况下(-XX:SurvivorRatio=8),Eden Space 是8M,From和To都是1M。

在new一个对象时,先在Eden Space上分配,如果Eden Space空间不够就要做一次Minor GC。Minor GC后,要把Eden和From中仍然活着的对象们复制到To空间中去。如果To空间不能容纳Minor GC后活着的某个对象,那么该对象就被promote到老年代空间。从Eden空间被复制到To空间的对象就有了age(年龄)=1。此age=1的对象如果在下一次的Minor GC后仍然存活,它还会被复制到另一个Survivor空间(如果认为From和To是固定的,就是又从To回到了From空间),而它的age=2。如此反复,如果age大于某个阈值(-XX:MaxTenuringThreshold=n),那个该对象就也可以promote到老年代了。

如果Survivor空间中相同age(例如,age=5)对象的总和大于等于Survivor空间的一半,那么age>=5的对象在下一次Minor GC后就可以直接promote到老年代,而不用等到age增长到阈值。

在做Minor GC时,只对新生代做回收,不会回收老年代。即使老年代的对象无人索引也将仍然存活,直到下一次Full GC

深入了解JavaGC机智可参考文章:http://blog.csdn.net/initphp/article/details/30487407

时间: 2024-09-12 01:23:21

JavaGC垃圾处理的相关文章

垃圾处理业:2015年市场规模将达266亿元

"没有形成正常的商业利润模式,而且预想的政府会大力支持的局面一直没有出现."2月26日,广州市中创沃德公司总经理段德连在接受记者采访时介绍,因缺乏资金.http://www.aliyun.com/zixun/aggregation/31393.html">垃圾分类困难等问题黯然夭折. 2010年5月,进军番禺区首批垃圾分类试点.推行厨余垃圾分类试点,即海龙湾小区的广州市中创沃德环保资源开发公司在该区的项目只存活了一个月. 记者调查发现,由于政策.资金和技术等诸多原因,广

[JVM]成为JavaGC专家(1)—深入浅出Java垃圾回收机制

对于Java开发人员来说,了解垃圾回收机制(GC)有哪些好处呢?首先可以满足作为一名软件工程师的求知欲,其次,深入了解GC如何工作可以帮你写出更好的Java应用. 这仅仅代表我个人的意见,但我坚信一个精通GC的人往往是一个好的Java开发者.如果你对GC的处理过程感兴趣,说明你已经具备较大规模应用的开发经验.如果你曾经想过如何正确的选择GC算法,那意味着你已经完全理解你所开发的应用的特点.当然,我们不能以偏概全,这不能作为评价一个好的开发人员的共通标准.但是,我要说的是,深入理解GC是成为一名伟

《深入解析Android 虚拟机》——2.5 内存异常和垃圾处理

2.5 内存异常和垃圾处理 对于C和C++的开发人员来说,在内存管理领域应该能够游刃有余.在计算机系统中,内存负责维护每一个对象生命的从开始到终结.Java内存分配与管理是Java的核心技术之一,通常Java在内存分配时会涉及到以下区域. 寄存器:在程序中无法控制. 栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中. 堆:存放用new产生的数据. 静态域:存放在对象中用static定义的静态成员. 常量池:存放常量. 非RAM存储:硬盘等永久存储空间.2.5.1 内存分

《深入解析Android 虚拟机》——第2章,第2.5节内存异常和垃圾处理

2.5 内存异常和垃圾处理 对于C和C++的开发人员来说,在内存管理领域应该能够游刃有余.在计算机系统中,内存负责维护每一个对象生命的从开始到终结.Java内存分配与管理是Java的核心技术之一,通常Java在内存分配时会涉及到以下区域. 寄存器:在程序中无法控制. 栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中. 堆:存放用new产生的数据. 静态域:存放在对象中用static定义的静态成员. 常量池:存放常量. 非RAM存储:硬盘等永久存储空间. 2.5.1 内存

带走行动引发外媒关注震灾垃圾处理考验国民素质

过马路,处理垃圾,这些小事,都在体现着一个国家的国民素质.而日前,在外媒看来,中国正在从这些小事身上入手,改善着自己的对外形象.据雅虎.美联社等国际媒体报道,雅安地震中,涌现出的数千"带走行动"志愿者成为地震救援现场最感动人心的正能量,"将食物送进去.将垃圾带出来"的全新绿色救灾方式不仅在见证着中国日趋理性的救灾方式,也在彰显着中国国民素质和企业赈灾意识的提升.雅虎美国在报道中指出,长期以来,震灾垃圾处理一直是全球广泛关注的世界性难题.以日本为例,其日常垃圾处理分类

住建部关于开展城市生活垃圾处理有关情况调研通知

各省.自治区住房和城乡建设厅,北京市市政市容管理委员会,上海市绿化和市容管理局,天津市市容和园林管理委员会,重庆市市政管理委员会,新疆生产建设兵团建设局: 为全面了解我国城市生活垃圾处理现状,为"十二五"规划编制以及相关政策制定提供依据,我部将组织开展有关调研,现将调研事项通知如下: 一.调研内容 1.城市生活垃圾处理技术和产品.主要包括垃圾处理有关技术与产品的工艺流程稳定性.技术可靠性.成本可行性.污染控制.产业化发展情况等内容. 2.城市生活垃圾处理政策法规标准体系.主要包括地方与

供气供水供暖和垃圾处理四大行业将引入民资

备受关注的市政公用事业改革,再次透出方向:并非所有的市政公用事业领域都将列入本轮的改革范围,仅有供气.供水.供暖和垃圾处理四大行业将作为市场开放.吸引民间资金进入的主板块. 记者获悉,住房和城乡建设部城建司日前下发<关于请报送市政公用事业改革情况的函>(以下简称"函"),要求各省将上述四大领域的改革经验.教训.监管办法.价格变动等情况,填写上报该部. 与此同时,记者还了解到,由住建部代拟的<国务院关于深化市政公用事业改革.推进节能减排保障公众利益的若干 意见>已

中山将研究制定电子垃圾处理收费价格政策

本报讯 (记者 魏蓉)电池用完了.手机坏了.电脑旧了该怎么办?前日,首届珠三角地区价格工作联席会议在中山市召开,并将资源环境.行政事业性收费等重点领域的价格改革试点任务提上议程.其中,中山将进行研究制定电子垃圾处理收费价格政策和探索制定学前教育收费的管理办法等的试点工作. 昨日,记者了解到,此次珠三角9市价格工作联席会议在总结交流珠中江.广佛肇.深莞惠<珠江三角洲地区改革发展规划纲要>的贯彻落实情况后,还议定了当前及今后一段时期重点推进的5项主要价格工作.分别是加快推进车辆通行费年票互认.促进

国家审计署:污水垃圾处理项目超半数未按期完工

昨天,国家审计署发布<9个省市2010年度城镇污水垃圾处理专项资金审计结果>,我国"十一五"期间应完工的206个污水垃圾处理项目中,有114个未按期完工,占55.34%. 此次审计署对天津.上海.浙江.湖北.广东.重庆.云南.深圳.成都9个省市2010年度城镇污水垃圾处理专项资金的征收.管理和使用情况进行了审计.在众多项目未按期完工的同时,审计署还发现一些完工的项目运营状况也不容乐观.审计抽查的天津.上海.浙江.湖北.重庆.成都6个省市建成投入运营1至3年的55个污水处理厂