RAM 可以說是組裝電腦的必備元件,也是電腦運行程式的基礎,所以這篇文章我們就來介紹一下,電腦中的 RAM 到底是什麼吧!
所謂的 RAM,他的全稱是「Random Access Memory」,台灣通常翻譯為「記憶體」、大陸則是翻譯為「內存」,不過不管是記憶體還是內存,他們指的都是電腦中的 RAM。
大家平常最接近 RAM 的情境,通常會是在買手機 or 買電腦的時候,像是在買電腦時,常常會聽到賣家宣傳:「這台電腦的記憶體有 16GB」或是「你要不要擴充記憶體到 16GB?」,這個記憶體所指的,實際上就是 RAM。
像是下圖中就是一條常見的 RAM:(平常有在組桌機的人可能有摸過,但如果你是買筆電的話,就很少有機會能看到 RAM,因為廠商在生產筆電時,就已經把他嵌進筆電裡面了)
那麼 RAM 到底可以幹嘛呢?RAM 真的是容量越大越好嗎?(當然越大也越貴),下面就介紹 RAM 實際的用途為何。
不知道大家在寫程式時,有沒有曾經思考過:「這個程式到底是怎麼運行在電腦上的?」,譬如說,當我們在程式中使用一個變數時,這個變數的空間到底哪裡來的?實際上這些變數就是存放在 RAM 裡面。
舉例來說,有一台電腦,他的 RAM 有 25 個空格:
假設此時有一個 A 程式,他裡面宣告了 5 個變數(假設一個變數佔用一格),所以當這台電腦執行 A 程式時,A 程式就會去 RAM 中佔用 5 格(沒錯就是佔地為王),因此 RAM 就只會剩下 20 格可以給其他人用。
假設這個時候,這台電腦又想去執行 B 程式,而剛好 B 程式裡面宣告了 15 個變數,因此 B 程式就會佔走 RAM 中的 15 格,因此 RAM 只剩下 5 格可以使用。
而如果這個時候,這台電腦又想去運行 C 程式,但因為 C 程式裡面宣告了 20 個變數,因此 C 程式需要 RAM 中的 20 格才能成功運行起來。但是因為目前 RAM 中僅存的空格只剩 5 格(其他的被 A 程式和 B 程式佔走了),因此 RAM 就沒有足夠的空間能夠運行 C 程式,所以此時就沒辦法運行 C 程式。
但如果這時候你還是很想運行 C 程式的話,那該怎麼辦呢?答案很簡單,你只要關掉 A 程式或是 B 程式,將 RAM 的空間釋放出來,就可以運行 C 程式了。
舉例來說,因為 C 程式需要 20 格,所以在這個情境下,就需要關掉 B 程式,將 B 程式的 15 格釋放出來,這樣子才有足夠的空間運行 C 程式。
所以這也是為什麼常常當我們 Google 分頁開太多時、或是 VS Code + IntelliJ + 其他 IDE 雙開時,電腦會開始有點卡卡的,這就是因為每一個分頁、每一個程式,他們實際上都在搶 RAM 的地盤啊!!!
當 RAM 剩餘的空間不夠時,電腦就會開始卡卡的,所以這也是為什麼在買電腦的時候,一定會建議大家要把 RAM 從 8GB 升到 16GB,因為當你的 RAM 有 16GB 時,就表示你的 RAM 的空地比較大,因此就可以 「同時容納更多的程式」,重點在「同時」。
所以換句話說,只要 RAM 越大,你就可以越瀟灑的運行更多的程式,再也不用擔心 RAM 的空間不夠用了,讚讚讚!!
了解了 RAM 的用途之後,接著我們可以看一下 RAM 的特性,以及 RAM 和硬碟的差別。
RAM 有一個很重要的特性,就是「當電腦關機之後,RAM 中的所有數據就會全部被刪掉,無法救回」,所以像是我們在程式中所宣告的變數,因為變數是儲存在 RAM 裡面,所以如果沒有及時的把變數中的值儲存到資料庫的話,那麼當這台電腦關機時,該變數的值也就會跟著被刪掉了,因此即使你重新開機,也無法找回當初的變數的值。
所以為了能夠有一個地方能「永久保存數據」,因此這時候就是「硬碟」派上用場的時候了!
其實硬碟大家日常生活中應該用的滿多的了,像是我們可以在 Windows 的 C 槽中創建一個檔案、或是在 Macbook 中創建一個檔案,這些檔案所儲存的位置,其實都是儲存在硬碟上。
而硬碟的特性,就是「即使電腦關機,裡面的數據仍舊會保存下來」,因此硬碟在電腦中所扮演的角色,就是一個永久的儲存空間,只要是關機後仍然想保留下來的數據,一定要儲存在硬碟中,這樣才不會隨著電腦關機而消失。
因此電腦就是透過 RAM 和硬碟的搭配,來完成程式的執行和數據的儲存了!
所以總結上面的介紹,RAM 的全稱是「Random Access Memory」,中文翻譯為「記憶體」或是「內存」,並且 RAM 的用途是「用來儲存程式執行過程中的變數」,也就是提供足夠的空間讓程式能夠順利運行。
而 RAM 和硬碟的差別就在於:
因此大家如果想要將程式中的計算結果永久儲存下來的話,記得一定要寫進硬碟裡面(不管是寫進檔案裡也好、還是寫進資料庫也好,就是要寫進硬碟就是了),不然的話那些數據就會隨著電腦關機,一起跟著消失了!
當大家了解 RAM 的概念之後,其實就可以理解「重開機治百病」的背後原理到底是什麼了🤣。
不知道大家有沒有遇到過,不管遇到什麼問題,好像只要重新開機一下,就可以解決他,很有可能就是因為 RAM 出問題了。
在前面有提到,RAM 的用途是「儲存程式執行過程中的變數」,而因為每個程式各自都會需要宣告一些變數,所以 RAM 需要提供足夠的空地給每一個程式。
但是重點來了!!假設有某個程式在結束執行時,不好好的歸還他所租借的空地的話,那這樣 RAM 就會越租越少,到最後就會變成無地可租的情況。
舉例來說,如果有一個 D 程式,他明明租借了 5 塊空格,但是在他程式執行完畢之後,他卻只歸還了 4 格,這樣子 RAM 的總額就會只剩下 24 格(原本是 25 格),進而降低了後續能租出去的空地,因此 RAM 就會越用越少,嚴重一點就會導致無空地可用,因此電腦就會整個卡住,沒辦法運行任何程式。
如果沒有寫過較底層的程式語言(如 C、C++),可能會覺得「當程式結束了,變數仍舊會佔用空間」這件事情怎麼可能發生,但是事實上,這件事情是真的會發生的🥹。
一般來說,較高階的程式語言(如 Java、Kotlin、Python、JavaScript、PHP…等),都會自動處理那些沒有用到變數,所以對於寫這些高階程式語言的工程師來說,當我們創建一個變數時,其實我們不需要思考「什麼時候要銷毀它」,我們只要創建它、然後用它來解決程式邏輯就好,根本不需要思考什麼時候要銷毀它,因為高階語言會自動幫我們去銷毀這些變數。
但是對於 C 和 C++ 這類較底層的語言來說,當你創建一個變數時,你是得要記得去銷毀他的,如果你忘記銷毀的話….那麼你的 RAM 就會一直沒辦法被釋放,因此那格 RAM 就會永遠被佔用,即使你的程式已經停止運作了,那格 RAM 仍舊會一直被佔用。
那假設那一格 RAM 一直被佔用該怎麼辦?目前只有一種手段可以解決,就是「重新開機」,因為重開機會強制刪除 RAM 中的所有數據,因此該格 RAM 就可以重新被釋放出來,讓其他人租借。
所以這也是為什麼重開機可以解決許多問題的原因,根本原因就是因為有某個工程師程式沒寫好,老是寫出一些忘記銷毀的變數,使得 RAM 的可用空間越變越小,所以才會導致電腦越跑越慢🥹。
所以下次當你的電腦又越跑越慢時,先別急著罵電腦廠商,很有可能是海的另一邊的某個工程師寫出了 bug,導致某個變數沒被釋放,所以才會使得你的 RAM 越用越少。既然都是工程師,就別為難彼此了XDD,寫出 bug 是常有的事,大家就默默重開機就好😂。
補充:當然還有許多因素會影響 RAM 的可用空間啦,不過通常 RAM 真的是會越用越小,所以建議大家可以定時重新開機,就可以強制清空 RAM,讓你的 RAM 能夠重新變回一塊乾淨的空地~
補充 2:在高階語言中,「自動銷毀變數的機制」稱為「Garbage Collection」,簡稱「GC」,中文翻譯為「垃圾回收」,其中又以 Java 的 GC 做的最為知名,如果大家有興趣的話,也可以再上網搜尋 GC 相關的介紹。
這篇文章我們介紹了 RAM 的用途是什麼、並且也比較了 RAM 和硬碟的差別,希望可以透過這週的電子報,讓大家了解 RAM 的用途是什麼,對於平常開發的電腦有更多的認識。
如果你對後端技術有興趣的話,也歡迎免費訂閱 《古古的後端筆記》電子報 ,每週二為你送上一篇後端技術分享,那我們就下一篇文章見啦!