阅读源码的好处(源码阅读软件)
导语:优秀的程序员更重视阅读源码,不看源码那是假的
分享职场生活、职场攻略、领导同事相处技巧和创业资源
文|洪生鹏
01从事java开发的都知道java有个垃圾回收机制Garbage collection,要准确理解Java的垃圾回收机制,我们可以从:“什么时候”,“对什么东西”,“做了什么事情”这三个方面来分析。01、“什么时候”
“什么时候”即是GC触发的条件。GC触发的条件有两种:
程序调用System.gc时可以触发;系统自身来决定GC触发的时机。系统判断GC触发的依据:根据Eden区和From Space区的内存大小来决定。当内存大小不足时,则会启动GC线程并停止应用线程。
新生代、老年代结构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可用内存,则把该对象转存到老年代,且老年代的可用内存小于该对象大小02、“对什么东西”
要是在面试时,面试官问“对什么东西”,有的求职者回答 没有用的对象,按道理来说,这并没有错,只是这并不是理想的答案。要是能更进一步分析,那就更好了,GC操作的对象分为:通过可达性分析法无法搜索到的对象和可以搜索到的对象。对于搜索不到的方法进行标记。从root搜索不到,而且经过第一次标记、清理后,仍然没有复活的对象。
对于用可达性分析法搜索不到的对象,GC并不一定会回收该对象。要完全回收一个对象,至少需要经过两次标记的过程。
把问题具体化了一些,对类似这样的对象进行回收,相信能给你这次面试加分。
03、“做了什么事情”
这个问题,回答空间其实挺大的,笼统地回答删掉暂没有使用的对象,节省内存。也不能说有错误,但要是我们能把问题再具体化一些,效果会更好。
要想搞清楚所以然,这就要求我们平时在开发中,要多留意去看看源代码。阅读源码的好处:一方面可以我们从中学习代码的架构,编码风格等,另一方面有助于我们了解正在做的东西的实现原理,用到哪些算法、数据结构等。有助于我们知其然又知所以然。
02那么我们如何阅读源码呢?正确的学习方法不仅能够让我们事半功倍,也能够让我们更容易理解来龙去脉。
作为一名初学者,刚接触源码,往往让初学者手足无措。我们可以先把源码安装起来编译起来,结合它的操作文档,熟悉其功能和它的api。
要是遇到的英文文档,英文水平还可以,能让你阅读英文的水平大幅提升。
浏览源码的目录结构,了解各个目录的功能。从整体上理清这个工程由哪些模块组成,最好能自己手动画一份目录结构图。
经过前面两步相信你对这个工程有了初步的了解。
熟悉源码编码风格,是采用驼峰命名规则还是匈奴利亚法。平时在阅读时,不妨参考下面3点做法。
阅读源码时要是看到工具类,要尽量去熟悉。这一步的分析可以学习到源代码的系统架构方式。我们可以从中学到源码的编写技巧,有助于提高我们的编码能力。结合一些安全规则,研究源码在安全方面是如何设计的。这样可以提高自己在安全方面的意识。研究系统所用到设计模式,一样的功能实现,用到的设计模式可能相差很多,对比我们之前所作的东东分析设计模式。对于设计模式,笔者从遇到一位从事4年多Android开发的同事,对设计模式并不重视,譬如建造者模式,AlertDialog.Builder这个,项目里到处都用,可他就是不知道是怎么实现,其实AlertDialog.Builder就是使用了Builder模式来构建AlertDialog的。纸上得来终觉浅,得知此事要躬行。我们可以写一些简单的demo,注意是要自己手动编写,不要想当然,并且调试出来,这样才能做到更加理解代码。好了,今天的分享就先到这,感谢阅读!
你见过马化腾、刘强东编写的代码吗?
本文内容由小馨整理编辑!