浅谈Java垃圾回收(GC)机制的理解

说起Java的垃圾回收机制,对一般程序员来说是一种方便,日常用法可能也不会太在意。举个生活的例子,先强行理解一波,然后在看大牛的分析会好很多:

1. 没有垃圾回收机制会是什么样的世界:
就像你去学校餐厅吃饭的那段时间,有人吃完饭,没有收拾就走了,他剩下的无用的饭菜,影响到你坐那个桌子,当这种不主动收拾的行为习惯多了之后,餐厅就没法运行。(大概类似C,C++,你需要手动管理自己开辟的内存,就像吃完饭需要手动把桌子清理一下,但是总会有忘的时候,当无用的内存忘记释放时,不仅有内存泄露的问题存在,还浪费了内存空间。对于这种问题,java使用了GC机制,不在需要用户管理)。
2. 有垃圾回收机制的世界:
一个饭店,他不想靠用户打扫他自己的餐桌,他更愿意请服务员来自动打扫,虽说这个服务员是清理垃圾的,但是他也有自己的想法,不是一个餐桌吃完了,他就去收拾垃圾,因为跑来跑去会妨碍到顾客点餐等。(这就是GC为什么不会马上执行的原因,因为调用GC会占用一部分性能,避免反复调用)
顾客想让你清一下桌子上的垃圾,这时还有位置坐,服务员肯定是先让你坐下,等有空的时候整体把垃圾一套带走。(这就是程序员调用GC,jvm并不会立即执行垃圾清理,他只是起到了一个通知的作用)
当垃圾回收全部交给服务员处理,你想提高饭店的效率,那有一部分就是从服务员下手,培训服务员更聪明的收拾垃圾。(JVM优化,有一部分是对GC机制进行特殊的优化)
更聪明的饭店呢他会根据不同的人来分不同的房间。经常清理的也就是大厅的客人桌子,当客人一直点餐,那么服务员给他换高档一点的桌子也是有这种情况的。(就是堆中的Eden,当满的时候会进行清理,然后用复制算法把内存中的全部复制到From,To空间中,多次之后会进入Tenured空间,并清空Eden,方便获取连续的空间)

详细领悟垃圾回收机制

博主是个小白,也写不出高深的文章,先多积累知识,充实自己,日后提升后在做一些专业的文章。成长期间很感谢这篇文章,让我理解了很多。
图解Java 垃圾回收机制

猜你喜欢

转载自blog.csdn.net/quaint_csdn/article/details/84197239