码迷,mamicode.com
首页 > 其他好文 > 详细

GC——分代

时间:2018-05-13 11:51:52      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:image   tis   技巧   频率   com   UI   对象   技术   .com   

新生代GC(Minor GC):发生在新生代的GC,这类对象生命周期短暂,GC频繁,速度快。
老年代GC(Full GC):发生在老年代的GC,频率低,速度较慢。
大多数情况下,对象在新生代分配,空间不够时会进行一次Minor GC,生命周期长的对象会转移到老年代。
大对象(需要大量连续内存空间的对象)在老年代分配。

分代的目的(个人愚见):GC会自动进行内存回收,但是前提是GC认为这个对象可以回收了:没有对它的引用。GC要获得这个前提,就得进行判断(根搜索算法等)。生命周期长的对象,在短时间内肯定存在引用的,频率可以放低,生命周期短的GC频率高点。

对象创建技巧:尽可能缩短对象的生命周期,即对象的作用域尽可能小。因为对象在作用域范围内是不会被GC的,那么当对象多了之后,可能需要进行Minor GC或者把生命周期长的对象转移到老年代。而老年代的对象的GC是很慢的。不利于内存回收:)

举个栗子:
比如:MyBatis中,SqlSessionFactoryBuilder对象的作用就是创建一个SqlSessionFactory,而对于一个数据库而言SqlSessionFactory只需要一个。这样一来,SqlSessionFactoryBuilder对象在创建完SqlSessionFactory后就没用了,所以把SqlSessionFactoryBuilder的创建放在局部进行。而每次访问数据库,SqlSessionFactory都要创建一个SqlSession,所以SqlSessionFactory可以是单例对象(饱汉式/饿汉式的优缺点再说)且随服务器启动、关闭而生死。

技术分享图片

 

GC——分代

标签:image   tis   技巧   频率   com   UI   对象   技术   .com   

原文地址:https://www.cnblogs.com/xiangguoguo/p/9031422.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!