這兩天收集了一些基礎知識, 記錄下
記憶體管理
通常使用 記憶體對齊方式 (8 位元組、16 位元組、32 位元組),
有的值可能只佔用兩個位元組,但是為什麼還要一次性分配8位元組呢.
原因是為了記憶體的可複用性, 產生更少的記憶體碎片.
new(9) 大於8, 將會使用16位元組記憶體。
但是仔細想想, 8位元組 16位元組等等過於零散,可以再對記憶體進行歸類組織, 就使用到了 頁 的概念。
垃圾回收
引用計數
每個物件擁有一個ref屬性,標記引用的次數。
缺點
有可能造成迴圈引用,記憶體無法釋放
增一減一 各種環境下要求準確記錄, 如果出現不正確計數, 將會引發嚴重問題
優點
速度快
補償措施
單獨gc演算法定期掃描引用連結串列,進行釋放
標記清理
最典型為三色標記法(golang)
代齡
根據物件的生命週期, 標記為 0 1 2 三級代領, 具體參考 java、C#
程式、執行緒、協程
程式
作業系統分配儲存資源的最小單元
執行緒
程式執行時的最小單位,它是程式的一個執行流,是CPU排程和分派的基本單位(所以一個程式最少一個執行緒)
協程
在使用者空間實現多工的排程而多工排程是發生在一個執行緒上的,我們把這種機制稱之為協程, 因為在一個執行緒上,協程的本質是序列的。
上下文切換
cpu程式的切換最消耗效能了, 因為整個程式都得儲存現場或者恢復現場
執行緒的切換因為同程式內共享地址空間, 切換相比程式開銷要小得多
gdb
軟體崩潰後會產生core檔案, 預設linux沒有開啟
ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
max locked memory (kbytes, -l) unlimited
max memory size (kbytes, -m) unlimited
open files (-n) 32768
pipe size (512 bytes, -p) 1
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 1418
virtual memory (kbytes, -v) unlimited
複製程式碼
開啟命令:
ulimit -c unlimited #unlimited表示不限制大小
複製程式碼
如果想要永久生效,可以“ulimit -c unlimited”這一行加到 /etc/profile 檔案中去,放到這個檔案最後一行即可。