国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

如何去學習編程

dongfangyiyu / 1637人閱讀

摘要:我們學習程序語言一定不要被束縛到語言細節和規范上面,而要從計算機邏輯執行層面思考。多核的出現人們自然想到使多個線程同時執行垃圾回收的工作,減少垃圾回收時間如,為了將啊垃圾回收對程序的影響降到最低,人們又發明了并發回收器,仍需要。

我們學習程序語言一定不要被束縛到語言細節和規范上面,而要從計算機邏輯執行層面思考。細節和規范都是人為設定的,是大牛抽象計算機邏輯后的加工品。對于技術問題我們要尋根溯源,要高屋建瓴。

這段時間在準備面試,為了自認為更好的表現而去背大量的面試題。今日在知乎看到了這一段話,讓自己醍醐灌頂。

我們就從java虛擬機這個方面開始說說看,很多小白一上來就被各種分代,處理器類型搞暈了包括我,往往就是死記硬背了那么一些規則,根本談不上理解的深入。但是事情的出現都是有原因的,都是為了解決實際的問題。

java程序運行在虛擬機之上,虛擬機又和操作系統打交道,完成數據的存儲,運算,輸出。虛擬機在加載.class文件的時候會在內存開辟一個“方法區”來存儲類的基本信息同時在“堆”生成一個Class對象為反射提供了支持。。內存是有限的,而程序運行時又不斷的創建對象,因此我們要定期處理一些不用的對象。生成對象的方法有new,反射,清理對象就有我們常用的GC算法如標記,標記整理,復制算法等等。

為什么會有三種方法?因為每種方法都有自己的局限性,標記-清除算法的缺點在于會產生大量的內存碎片標記-整理算法則是對它的一種改進,將碎片往一邊移動,缺點是。復制算法則解決了內存碎片的問題,但浪費了50%的額外空間。我們要依據不同類型對象的特點采取最合適的算法進行處理。對于新生代,由于數量少我們采用復制算法提高效率,對于老生代對象因為數量眾多我們采取標記-整理算法進行處理。

好了具體垃圾回收算法我們清除了,我們再想想按什么策略去執行垃圾回收?大多數人都能想到的是后臺運行一個進程,每隔段時間進行垃圾回收,完成之后再繼續執行原來的程序,這就是最原始的串行回收器Serial。多核的出現人們自然想到使多個線程同時執行垃圾回收的工作,減少垃圾回收時間如ParNew,為了將啊垃圾回收對程序的影響(STW)降到最低,人們又發明了并發回收器(CMS),仍需要STW。最新的G1收集器與CMS一大優勢就是建立可預測的回收時間,指明在長度為M毫秒的時間段內,垃圾回收的時間不超過N秒。

再看看多線程,我們都知道線程切換會消耗資源,那么具體消耗什么資源呢?從計算機底層來講,操作分三步,從內存取值,計算,將值放入內存。大概過程就是PC(程序計數器)從指存(cache)取下一條指令,IR(指令寄存器)保存當前執行的指令,再從數存取數據結合ALU(算術邏輯單元)通用寄存器完成計算后將結果放入DR(數據緩存寄存器),最后將DR的值放入內存。我們想一下為什么要這么設計(不要死記硬背),cache是緩存層可以加快取指令的速度,執行程序時我們當然需要保存現在的指令(IR)和下一條指令(PC),指令有了我們需要數據吧,那就從數存(AR數據地址寄存器)里面取,指令數據都有了我們要執行具體的運算那么就用到了ALU,但是不是還差了什么?比如1+1,這兩個1放到那里,運算結果2又該放那里,這就需要一個工作區(通用寄存器)存放運算間的數據。運算完成了我們需要輸出結果,輸出到那里?對,就是DR,最后進入內存。為什么不直接輸入到內存,這和取值需要cache一個道理,補償CPU和內存在速度上面的差別。剛開始學組成原理各種寄存器給我留下了莫大的陰影,但是一切的設計背后的思路都是很簡單了,各種細節與規定是為了保證實際操作的安全性和可靠性,所以我們首先要去理解設計后面的思想而不要將自己局限于細節。扯的有點遠了,再看看多線程切換為什么消耗資源。java虛擬機中的程序計數器保存著當前線程執行的指令,切換線程時就要把線程的執行指令放到操作系統的指令寄存器,除此之外線程的其它資源也需要切換比如I/O設備。除了切換,線程的創建也是需要消耗資源的。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/68972.html

相關文章

  • 沒有基礎或者基礎差,如何快速學會編程?這6招絕對好使

    摘要:第一點,先清楚你的目的你學編程想要做什么你對哪方面感興趣然后去百度查一下哪些編程語言適合做那個方向,帶著目的去學習,如果一開始沒選好,中途掉頭就很可惜了。 你是不是...

    EasonTyler 評論0 收藏0
  • 如何成為一個優秀的程序員

    摘要:我開始去關注一個問題的最終目的是什么,得益于喬治波利亞的書如何解決這個問題。在此基礎上,我也會制定了計劃,這也是喬治波利亞的另一個建議。明白為什么讓我對前后關系理解更深刻,幫助我成為一個見多識廣的程序員。 showImg(https://segmentfault.com/img/bVbvMKu); 原文鏈接: https://medium.com/free-code-camp... ...

    wuyangchun 評論0 收藏0
  • 如何保持學習編程的動力

    摘要:上次翻過一篇我是如何在自學編程個月后找到工作的,是一個編程自學者的經驗之談。如果你想通過學習編程來改善你的生活,你不該總想著這些快速成功的案例。 有人問我, Reddit 是什么網站,我想了下說: 美國貼吧 。 但話說回來,關注了一陣子我發現,Reddit 上的討論真要比貼吧不知道高到哪里去了,甚至比不少知乎回答要有價值。而且感覺下面的討論氛圍也更好些。 我在上面關注了 learnpr...

    lastSeries 評論0 收藏0
  • 我是如何零基礎自學轉行人工智能的(附十問十答)

    摘要:我的決定是學人工智能,當時對這個比較感興趣。從機器學習學到深度學習再學回機器學習。面試,成功地去公司從事機器學習深度學習方面的基礎工作。這個系列不僅僅以學習為目的,目的是為了達到機器學習的工作入門標準。 每個字都是經驗所得,都是站在一個零基礎的人的角度寫的,純手打+網上優秀資源整合,希望大家能每個字都認真看。 接下來文章會側重在以下幾方面 1、零基礎如何進行人工智能的自學(以找工作為目...

    IamDLY 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<