Docker 的優點
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是一等公民,比如高階函數。一等公民的含義:函數可以作為參數傳入其他函數,也可以作為返回值被返回
注意,這里是函數作為參數,不是調用函數的返回值作為參數
實際上,在很多現代語言中,函數都是一等公民
有二種方式來做,一是作為語言中的類庫,二是在虛擬機中實現
訪問變量的順序:LEGB:Local-Enclosing-Global-Builtin
函數參數的默認值,可以用不可變對象,不要用可變對象,除非,你知道自己在做什么,想要什么:)
給編碼帶來方便的lambda表達式,使用FunctionObject。lambda有非常簡單的定義和規則,卻是一套圖靈完備的演算系統。
函數和方法的區別
函數就是獨立的,方法和其owner是有綁定的。另外python里沒有顯式的類方法或靜態方法。
語法糖,decorator, @符號
這一章的內容,需要配合高級編程能力來理解
第五天。其他。
迭代器:在編程語言中很常見。基本上是現代語言內置的能力。講虛擬機對它支持
yield: 講函數轉換為迭代器對象
線程:OS級別,OS負責調度
協程:用戶級別。與線程是多對多的關系。
它與線程的原理類似。主要有保存/恢復現場,調度,維護協程與IO動作的對應,協程之間的同步等
JIT:熱的燙手的方法,會開辟一塊內存,翻譯為機器碼后放進去。這塊內存的權限是可寫,寫執行。還是不會落盤的。之后的執行就調機器碼,執行效率更高
Profiling: 動態分析技術,以過去預測未來。實際與預期不符,也可以退優化。與預期相符,就享受優化后提速的好處
比如,條件判斷中,根據歷史數據進行統計得到的結果,將執行比率最多的分支放到最前面
解釋器:逃生門。永遠在這里。隨時歡迎優化失敗的你回家
Python JVM
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。