了解了JVM中的内存分配以及数据存储的情况,那么怎么分配的方式是最高效的,对于已经过期无用的内存占用我们怎么回收起来,这个活必须得有人来干。好在JVM自带有垃圾回收机制,我们不需要关心这些,但是当我们需要排除各种内存溢出,内存泄漏的问题时。了解其中的一些知识还是很有必要的。
说明: 本系列多处摘抄《深入理解Java虚拟机》中内容,主要精简了本书的要点,并叙述自己对本书的理解。本人才疏学浅,文章中有不对的地方,还望批评指教。
33.125: [GC [DefNew: 3324k ->152k(3712k),0.0025925 secs] 3324k->152k(11904k),0.0031680 secs]
最终都是给对象分配内存和回收分配给对象的内存
如果在一个Survivor空间中相同年龄所占内存大小占有一半,那么大于或者等于该年龄的对象直接进入老年代
新生代的回收采用“复制算法”,如果没有足够的内存空间,需要老生代来担保,将一部分对象直接进入老年代,如果老年代空间还是不足,就有危险了。所以就根据以前进入老年代的对象容量大小的平均值来做个参考。通过Fulll GC 对老年代进行一次GC,尽量腾出更多的空间。以防担保失败。
本篇了解引用的算法,由此去判断一个对象是"死”还是“活”,四种引用类型,由强至弱,生存能力越来越差,被GC回收的可能性也就越高。当然在一生中有唯一一次的自救机会,就是复写finalize()方法。进行垃圾回收时,会影响到性能。所以,出了各种回收算法以及垃圾回收器。这些各有优劣,只有适合当前环境的才是最好的。
小贴士
本文由原作者井方哥独家授权Open软件开发小组发布,著作权归原作者所有。如需转载请联系原作者申请授权。