高級語言實現的幾個點

這兩天收集了一些基礎知識, 記錄下java

內存管理

一般使用 內存對齊方式 (8 字節、16 字節、32 字節),linux

有的值可能只佔用兩個字節,可是爲何還要一次性分配8字節呢.golang

緣由是爲了內存的可複用性, 產生更少的內存碎片.算法

new(9) 大於8, 將會使用16字節內存。bash

可是仔細想一想, 8字節 16字節等等過於零散,能夠再對內存進行歸類組織, 就使用到了 頁 的概念。性能

垃圾回收

引用計數

每一個對象擁有一個ref屬性,標記引用的次數。ui

缺點

有可能形成循環引用,內存沒法釋放spa

增一減一 各類環境下要求準確記錄, 若是出現不正確計數, 將會引起嚴重問題操作系統

優勢

速度快線程

補償措施

單獨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 文件中去,放到這個文件最後一行便可。

相關文章
相關標籤/搜索