程序猿java干货Java

从Java垃圾回收机制窥探内存优化

2016-08-12  本文已影响1688人  拉丁吴

作为Android工程师,我看过很多关于Android内存泄漏的相关优化的文章,其中大部分都是告诉你该怎么做,做哪些,列一些具体的措施。而从来也没有解释为什么要这么做。

今天,我想从这方面内存优化的背后的机理入手,去浅浅的探究一下背后的准则。但是,要想研究Java的内存优化,就必须研究Java辣鸡回收机制。而想要能基本理解GC,就必须了解Java程序运行时的内存区域。没办法,学习学全套嘛。

况且,我是专业的。

下面,就是Java程序运行时的内存模型

内存模型.png

讲到这里,你可能开始有点晕了,我的错,这是年轻的时候写作文经常爱凑字数落下的老毛病,以至于一动笔就开始拉家常。你们把刀放下来,听我继续讲。

你写的程序数据被分配到那五个区域之后。躲在暗处的那个饥渴难耐端的垃圾回收机制就马上跳出来了。

但是也不是每个区域他都去回收垃圾,不要以为只有人是势利的,其实GC程序也是很势利很现实的,它从来都只去那些容易收到垃圾的地方去收垃圾。也就是堆中。因为堆占据了Java运行时内存的大头........当然了,我是开玩笑的,实际上GC去哪里回收垃圾是规定好的。

嗯,终于要到内存优化的地方了。前面已经讲到,Java会专注的在堆中回收垃圾,而堆中基本上之存放对象实例,所以内存回收的重点就是对象实例!!

那么,GC回收对象的准则什么呢?答案是GC Roots引用链

其实我知道,就算我解释那么多你也不太懂,没关系,我来画一画就好了,做事做全套嘛,

况且,我是专业的。

引用链.png

好了,我们终于把Java内存回收的机理讲完了,那么内存优化背后的机理也基本被我们扒开了:

那么对应Android的内存优化的建议就很直观了,基本围绕了一个点:

Java内存优化最根本的准则,就是努力使你的程序适配Java的GC机制

你很可能有点不耐烦,觉得其实我可以几句话就把事情说清楚,却扯一大堆幺蛾子,浪费你宝贵时间。

我说过了,凑字数是我的老毛病了,况且,我是还是专业的。

上一篇下一篇

猜你喜欢

热点阅读