不看源碼的程式設計師不是好程式設計師,工作忙並不能成爲不看源碼的理由

分享職場生活、職場攻略、領導同事相處技巧和創業資源

文|洪生鵬

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點做法。

  1. 閱讀源碼時要是看到工具類,要儘量去熟悉。這一步的分析可以學習到源代碼的系統架構方式。我們可以從中學到源碼的編寫技巧,有助於提高我們的編碼能力。
  2. 結合一些安全規則,研究源碼在安全方面是如何設計的。這樣可以提高自己在安全方面的意識。
  3. 研究系統所用到設計模式,一樣的功能實現,用到的設計模式可能相差很多,對比我們之前所作的東東分析設計模式。對於設計模式,筆者從遇到一位從事4年多Android開發的同事,對設計模式並不重視,譬如建造者模式,AlertDialog.Builder這個,項目裡到處都用,可他就是不知道是怎麼實現,其實AlertDialog.Builder就是使用了Builder模式來構建AlertDialog的。

紙上得來終覺淺,得知此事要躬行。我們可以寫一些簡單的demo,注意是要自己手動編寫,不要想當然,並且調試出來,這樣才能做到更加理解代碼。好了,今天的分享就先到這,感謝閱讀!


分享到:


相關文章: