优秀的程序员更重视阅读源码,不看源码那是假的

从事Java开发的都知道java有个垃圾回收机制Garbage collection,要准确理解Java的垃圾回收机制,咱们能够从:“何时”,“对什么东西”,“作了什么事情”这三个方面来分析。0一、“何时”java

“何时”便是GC触发的条件。GC触发的条件有两种:面试

程序调用System.gc时能够触发;算法

系统自身来决定GC触发的时机。设计模式

系统判断GC触发的依据:根据Eden区和From Space区的内存大小来决定。当内存大小不足时,则会启动GC线程并中止应用线程。api

新生代、老年代结构minor gc/full gc,还须要了解Minor GC 金额Full GC 触发条件安全

Minor GC触发条件:数据结构

当Eden区满时,触发Minor GC。架构

Full GC触发条件:工具

调用System.gc时,系统建议执行Full GC,可是没必要然执行学习

老年代空间不足

方法去空间不足

经过Minor GC后进入老年代的平均大小大于老年代的可用内存

由Eden区、From Space区向To Space区复制时,对象大小大于To Space可用内存,则把该对象转存到老年代,且老年代的可用内存小于该对象大小

0二、“对什么东西”

要是在面试时,面试官问“对什么东西”,有的求职者回答 没有用的对象,按道理来讲,这并无错,只是这并非理想的答案。要是能更进一步分析,那就更好了,GC操做的对象分为:经过可达性分析法没法搜索到的对象和能够搜索到的对象。对于搜索不到的方法进行标记。从root搜索不到,并且通过第一次标记、清理后,仍然没有复活的对象。

对于用可达性分析法搜索不到的对象,GC并不必定会回收该对象。要彻底回收一个对象,至少须要通过两次标记的过程。

把问题具体化了一些,对相似这样的对象进行回收,相信能给你此次面试加分。

0三、“作了什么事情”

这个问题,回答空间其实挺大的,笼统地回答删掉暂没有使用的对象,节省内存。也不能说有错误,但要是咱们能把问题再具体化一些,效果会更好。

要想搞清楚因此然,这就要求咱们平时在开发中,要多留意去看看源代码。阅读源码的好处:一方面能够咱们从中学习代码的架构,编码风格等,另外一方面有助于咱们了解正在作的东西的实现原理,用到哪些算法、数据结构等。有助于咱们知其然又知因此然。

那么咱们如何阅读源码呢?正确的学习方法不只可以让咱们事半功倍,也可以让咱们更容易理解前因后果。

做为一名初学者,刚接触源码,每每让初学者手足无措。咱们能够先把源码安装起来编译起来,结合它的操做文档,熟悉其功能和它的api。

要是遇到的英文文档,英文水平还能够,能让你阅读英文的水平大幅提高。

浏览源码的目录结构,了解各个目录的功能。从总体上理清这个工程由哪些模块组成,最好能本身手动画一份目录结构图。

通过前面两步相信你对这个工程有了初步的了解。

熟悉源码编码风格,是采用驼峰命名规则仍是匈奴利亚法。平时在阅读时,不妨参考下面3点作法。

阅读源码时要是看到工具类,要尽可能去熟悉。这一步的分析能够学习到源代码的系统架构方式。咱们能够从中学到源码的编写技巧,有助于提升咱们的编码能力。

结合一些安全规则,研究源码在安全方面是如何设计的。这样能够提升本身在安全方面的意识。

研究系统所用到设计模式,同样的功能实现,用到的设计模式可能相差不少,对比咱们以前所做的东东分析设计模式。对于设计模式,笔者从遇到一位从事4年多Android开发的同事,对设计模式并不重视,譬如建造者模式,AlertDialog.Builder这个,项目里处处都用,可他就是不知道是怎么实现,其实AlertDialog.Builder就是使用了Builder模式来构建AlertDialog的。

纸上得来终觉浅,得知此事要躬行。咱们能够写一些简单的demo,注意是要本身手动编写,不要想固然,而且调试出来,这样才能作到更加理解代码。好了,今天的分享就先到这,感谢阅读!

相关文章
相关标签/搜索