自己動手Python虛擬機讀書會筆記

      網友投稿 1062 2022-05-29

      第一天。導言和基本概念

      虛擬機有2種,一種就叫虛擬機,VM,如VM Ware。一種叫語言虛擬機,如java語言的虛擬機,JVM

      其實我有一個疑問,JVM屏蔽了下面的硬件/CPU指令集差異,做到了上面的JAVA代碼的一次編譯,在各不同硬件平臺的JVM都能運行

      VM Ware可以做到嗎,比如VMWare里的windows環境,可以運行到ARM硬件平臺上嗎?這是我的疑問

      講了javac的編譯流程,也講了如何查看字節碼和反編譯

      HotSpot字面意思就是熱點地區,熱中之熱,那就進行JIT編譯為機器碼

      從個人角度來說,寫虛擬機是有點超出個人能力的事情,但仍然可以從本次讀書中吸取知識

      比如,在編譯過程中,對Java代碼的注解、foreach迭代等的處理,會從另外一個角度全面化對編碼的認識。

      另外,提升對泛型的理解。

      對于指令集,可以分為基于棧的,和基于寄存器的

      JVM是基于棧的,而CPU,我理解是基于寄存器的

      第二天。構建對象系統

      我們都知道流行的面向對象編程OOP。那么在虛擬機里,如何明確對象的類呢?

      klass:對象的類型

      每個對象都有一個到kclass的引用,來表明自己的類型。這個引用叫Oop.Ordinary object pointer.

      所以,一個對象在虛擬機中的結構,除了我們編碼時定義的結構外,還包含

      object header, klass pointer

      python到底是強類型語言,還是弱類型語言?

      首先,python在聲明時可以不指定變量類型,可以動態變化

      所以它是弱類型嘍?其實不對。雖然變化,但是實際上是有類型的,所以是強類型

      這么說來,為什么js是弱類型?js完全沒有類型概念?我還有點不明白

      還講了動態類型的對象動態新增屬性的2種機制:Hash表,和二級指針擴展

      第三天。內存管理

      內存如果管理的不好,1一塊內存使用完畢,卻沒有回收,不能再次使用。這是浪費,與節約型社會的目標相違背

      2一塊內存還在使用中,竟然又分配給其他用戶使用,造成沖突、異常,這與和諧型社會的目標相違背

      內存管理的流程:

      1分配內存 2識別垃圾 3回收內存

      從頭到尾的管理,分配是你,識別是你,回收也是你,是你是你還是你,有沒有一點做管理者的感覺了?

      分配方法有二:free-list & bump-pointer

      free-list是用一個列表來記錄,這個列表就是管理者的小本子

      bump-pointer在堆中按順序分配

      識別垃圾的方法是從Root出發,不可達的對象就是垃圾

      回收機制有三:Sweep to free-list就是小本子記下那些已回收,壓縮Compaction 和 撤離Evacuation

      后二者都會移動對象

      第四天。函數和方法

      都知道函數在js是一等公民,比如高階函數。一等公民的含義:函數可以作為參數傳入其他函數,也可以作為返回值被返回

      注意,這里是函數作為參數,不是調用函數的返回值作為參數

      自己動手寫Python虛擬機讀書會筆記

      實際上,在很多現代語言中,函數都是一等公民

      有二種方式來做,一是作為語言中的類庫,二是在虛擬機中實現

      訪問變量的順序:LEGB:Local-Enclosing-Global-Builtin

      函數參數的默認值,可以用不可變對象,不要用可變對象,除非,你知道自己在做什么,想要什么:)

      給編碼帶來方便的lambda表達式,使用FunctionObject。lambda有非常簡單的定義和規則,卻是一套圖靈完備的演算系統。

      函數和方法的區別

      函數就是獨立的,方法和其owner是有綁定的。另外python里沒有顯式的類方法或靜態方法。

      語法糖,decorator, @符號

      這一章的內容,需要配合高級編程能力來理解

      第五天。其他。

      迭代器:在編程語言中很常見。基本上是現代語言內置的能力。講虛擬機對它支持

      yield: 講函數轉換為迭代器對象

      線程:OS級別,OS負責調度

      協程:用戶級別。與線程是多對多的關系。

      它與線程的原理類似。主要有保存/恢復現場,調度,維護協程與IO動作的對應,協程之間的同步等

      JIT:熱的燙手的方法,會開辟一塊內存,翻譯為機器碼后放進去。這塊內存的權限是可寫,寫執行。還是不會落盤的。之后的執行就調機器碼,執行效率更高

      Profiling: 動態分析技術,以過去預測未來。實際與預期不符,也可以退優化。與預期相符,就享受優化后提速的好處

      比如,條件判斷中,根據歷史數據進行統計得到的結果,將執行比率最多的分支放到最前面

      解釋器:逃生門。永遠在這里。隨時歡迎優化失敗的你回家

      Python JVM

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:Linux core dump問題定位
      下一篇:死鎖&活鎖
      相關文章
      亚洲好看的理论片电影| 国产亚洲精品美女2020久久 | 亚洲福利一区二区精品秒拍| 亚洲成av人片在线观看无码不卡| 日韩精品亚洲aⅴ在线影院| 亚洲精品老司机在线观看| 亚洲国产精品成人一区| 国产亚洲情侣久久精品| 日韩色视频一区二区三区亚洲| 亚洲av日韩av永久无码电影| 亚洲国产精品无码中文lv| 亚洲AV无码XXX麻豆艾秋| 国产AV无码专区亚洲AV蜜芽| 色综合久久精品亚洲国产| 久久精品国产亚洲AV| 成人亚洲国产精品久久| 亚洲av高清在线观看一区二区| 亚洲成av人片天堂网老年人| 精品国产亚洲男女在线线电影| 在线观看亚洲成人| 国产精品亚洲成在人线| 亚洲国产精品一区第二页| 久久精品亚洲一区二区| 老色鬼久久亚洲AV综合| 亚洲国产美女精品久久| 久久精品亚洲AV久久久无码| 亚洲人成色777777老人头| 亚洲av中文无码字幕色不卡| 亚洲AV无码一区二区三区在线观看| 亚洲免费一区二区| 久久精品国产亚洲沈樵| 亚洲视频在线一区| 亚洲伊人久久精品| 亚洲国产成人久久精品软件 | 亚洲老妈激情一区二区三区| 亚洲av中文无码乱人伦在线咪咕| 亚洲午夜久久久精品影院| 亚洲伊人久久大香线焦| 亚洲精品天堂无码中文字幕| 亚洲第一区精品观看| 亚洲开心婷婷中文字幕|