內(nèi)存與外存關(guān)鍵區(qū)別知識(shí)科普
首先簡要介紹一下計(jì)算機(jī)的存儲(chǔ)類型。在計(jì)算機(jī)的組成結(jié)構(gòu)中,存儲(chǔ)器是其中最重要的部分之一。存儲(chǔ)器是用來存儲(chǔ)程序和數(shù)據(jù)的部件,它賦予計(jì)算機(jī)的記憶功能,保證正常工作。下面就讓小編帶你去看看內(nèi)存與外存關(guān)鍵區(qū)別知識(shí)科普,希望能幫助到大家!
計(jì)算機(jī)的內(nèi)存和外存別再分不清了
內(nèi)存,是大家對內(nèi)部存儲(chǔ)器的簡稱,當(dāng)然,我們也可以叫內(nèi)部存儲(chǔ)器為主存。它是計(jì)算機(jī)中最重要的部件之一。內(nèi)存是計(jì)算機(jī)運(yùn)行過程中存放需要運(yùn)行的程序和數(shù)據(jù)的地方。計(jì)算機(jī)工作的時(shí)候,是先把需要處理的數(shù)據(jù)從外存調(diào)入內(nèi)存,然后CPU再從內(nèi)存中調(diào)取數(shù)據(jù);CPU處理完成當(dāng)前這些數(shù)據(jù)之后,又將數(shù)據(jù)送回到內(nèi)存中,之后才將內(nèi)存中的數(shù)據(jù)又存入外存中。
大家熟悉的插在在主板內(nèi)存插槽的內(nèi)存條,它叫隨機(jī)存取存儲(chǔ)器,英文是Random Access Memory,縮寫為RAM,CPU要使用外存中的數(shù)據(jù)時(shí),先把數(shù)據(jù)存入RAM中,RAM再將數(shù)據(jù)傳給CPU處理。
說到RAM,有一個(gè)和RAM縮寫相似的ROM存取器又是什么呢?ROM是Read-Only Memory的縮寫,它叫只讀存儲(chǔ)器。ROM所存數(shù)據(jù),一般是裝入整機(jī)前事先寫好的,整機(jī)工作過程中只能讀出,而不像RAM隨機(jī)存儲(chǔ)器那樣能快速地、方便地加以改寫。ROM所存數(shù)據(jù)穩(wěn)定 ,斷電后所存數(shù)據(jù)也不會(huì)改變;其結(jié)構(gòu)較簡單,讀出較方便,因而常用于存儲(chǔ)各種固定程序和數(shù)據(jù)。舉個(gè)例子,主板上的ROM里面固化了一個(gè)基本輸入/輸出系統(tǒng),簡稱為BIOS,它是個(gè)人電腦啟動(dòng)時(shí)加載的第一個(gè)軟件。BIOS它是一組固化到計(jì)算機(jī)內(nèi)主板上一個(gè)ROM芯片上的程序,它保存著計(jì)算機(jī)最重要的基本輸入輸出的程序、開機(jī)后自檢程序和系統(tǒng)自啟動(dòng)程序,它可從CMOS中讀寫系統(tǒng)設(shè)置的具體信息。
說了這么多,還是沒太明白內(nèi)存?沒關(guān)系,給大家來打個(gè)比方。假如說,你有一個(gè)經(jīng)常使用的書包,今天剛好周末,你打算出去逛逛街,于是你在書包里除了裝好錢包、鑰匙和手機(jī),你還帶上了水杯和面包零食,萬一路上餓了還能吃。逛完街回來晚上了,明天周一了,要回校上課了,你拿出你逛街時(shí)候買的東西,把你的書本、筆記本、學(xué)習(xí)工具統(tǒng)統(tǒng)裝進(jìn)你的書包。你看看,內(nèi)存就跟你常用的這個(gè)書包一樣,它不需要存放固定不變的東西,相反,不同的情況中,它所存放的東西是不一樣的,是可以隨時(shí)變化的。
那么,咱們再來說說外存吧。外存是相對計(jì)算機(jī)內(nèi)存及CPU緩存以外的外部部存儲(chǔ)器,硬盤,光盤,U盤都是常用的外存。外存上的數(shù)據(jù)一般斷電后仍然能保存數(shù)據(jù)。這里請大家注意下,在自己的個(gè)人電腦“我的電腦“界面中看到的C盤、D盤、E盤等這些都是外部存儲(chǔ)器,而不是內(nèi)存儲(chǔ)器。外存上保存的數(shù)據(jù)是暫時(shí)不使用的數(shù)據(jù)信息,比如你存在D盤中的電影和音樂,你存放在U盤中的學(xué)習(xí)資料等等。外存儲(chǔ)器的容量很大,比內(nèi)存的容量要大得多。
內(nèi)存儲(chǔ)器速度快 價(jià)格貴,容量小,斷電 后內(nèi)存內(nèi)數(shù)據(jù)會(huì)丟失。它是在計(jì)算機(jī)工作過程中暫時(shí)存放需要處理的數(shù)據(jù)和計(jì)算的結(jié)果,就像剛才說的你的書包,它是可是隨時(shí)更換其中的東西的,內(nèi)存中的數(shù)據(jù)也是隨時(shí)可以更換了,內(nèi)存它不用來長久保存數(shù)據(jù)。而你要長久保存一些數(shù)據(jù)信息的話,就需要使用外存儲(chǔ)器。外存儲(chǔ)器它的價(jià)格相對低些,容量大,但是讀寫數(shù)據(jù)的速度慢些, 斷電后數(shù)據(jù)不會(huì)丟失,所以它可以將你要長久保存的信息保存起來。
現(xiàn)在你分清楚什么是內(nèi)存和外存了吧。
內(nèi)存與外存的關(guān)鍵區(qū)別有哪些?
計(jì)算機(jī)內(nèi)存和外部存儲(chǔ)之間的主要區(qū)別是易失性和非易失性,以及性能和容量之間的差別。
易失性VS非易失性。內(nèi)存,例如隨機(jī)存取內(nèi)存(RAM),是具有易失性的。這意味著當(dāng)系統(tǒng)斷電時(shí),數(shù)據(jù)就會(huì)丟失。與之相反,外部存儲(chǔ)是非易失性的,因此即使沒有電源,它也能保存數(shù)據(jù)。
性能和容量。在大多數(shù)情況下,外存比內(nèi)存的速度慢得多。而與外存不同的是,RAM直接通過更寬更快的總線連接到CPU。
計(jì)算機(jī)內(nèi)存提供了對數(shù)據(jù)的快速訪問,而外存提供了更大的容量。
下面,讓我們仔細(xì)看看計(jì)算機(jī)系統(tǒng)中三個(gè)主要的存儲(chǔ)類型:主內(nèi)存、緩存和輔助存儲(chǔ)器(secondary memory)——其實(shí)“輔助存儲(chǔ)器”也可以說就是外部存儲(chǔ)器。
主內(nèi)存(Primary Memory)
主內(nèi)存是隨機(jī)存取內(nèi)存(RAM),內(nèi)存芯片接收和處理CPU指令,用于計(jì)算和存儲(chǔ)命令。處理器寄存器每個(gè)都保存少量數(shù)據(jù),并與CPU交互執(zhí)行數(shù)學(xué)運(yùn)算以及發(fā)出數(shù)據(jù)操作指令。(只讀存儲(chǔ)器,或著叫ROM,位于BIOS芯片上。)
主內(nèi)存是CPU直接訪問的易失性內(nèi)存。這個(gè)定義中包括了高速緩存內(nèi)存,但是主內(nèi)存是最常用的術(shù)語,用來描述通過快速總線連接到CPU的DRAM內(nèi)存模塊。DRAM芯片存儲(chǔ)那些用于CPU計(jì)算的數(shù)據(jù)。RAM將計(jì)算作為一組指令傳遞給附加的/網(wǎng)絡(luò)中的存儲(chǔ)媒介。
主內(nèi)存是依賴于不間斷電源的易失性存儲(chǔ),所以當(dāng)CPU斷電時(shí),內(nèi)存和存儲(chǔ)在RAM中的任何數(shù)據(jù)都會(huì)丟失。在啟動(dòng)時(shí),系統(tǒng)訪問操作系統(tǒng)并從存儲(chǔ)器中啟動(dòng)應(yīng)用程序,然后重新填充主內(nèi)存。盡管DRAM比高速緩存內(nèi)存的SRAM慢,但它的體系結(jié)構(gòu)以及與CPU的直接連接允許它傳輸數(shù)據(jù)的速度比輔助內(nèi)存或存儲(chǔ)快得多。
高速緩沖存儲(chǔ)器(Cache Memory)
高速緩沖存儲(chǔ)器是一種用于高速數(shù)據(jù)處理的高速緩存。高速緩存內(nèi)存標(biāo)識(shí)位于主內(nèi)存中的重復(fù)指令和數(shù)據(jù),并將其復(fù)制到其內(nèi)存中。CPU不再為相同的指令和數(shù)據(jù)重復(fù)訪問較慢的主內(nèi)存,而是訪問更快的緩存。
緩存有時(shí)稱為CPU內(nèi)存,通常運(yùn)行在高性能的SRAM內(nèi)存模塊上。CPU可以訪問更快的緩存內(nèi)存來運(yùn)行性能敏感的操作。高速緩存內(nèi)存通常集成在主板下,或者在不同的芯片上,通過總線與CPU互連。
高速緩存存儲(chǔ)器存儲(chǔ)CPU在計(jì)算機(jī)操作期間經(jīng)常訪問的指令和數(shù)據(jù)。CPU可以更快地從高性能高速緩存中檢索這些重復(fù)信息,而不必從主內(nèi)存中訪問這些信息。
為了達(dá)到這種性能水平,當(dāng)CPU處理數(shù)據(jù)和指令時(shí),它首先在主內(nèi)存之前查看緩存內(nèi)存。緩存內(nèi)存不是單塊的:多級緩存甚至更有效,因?yàn)镃PU可以在高緩存性能層或低緩存性能層對重復(fù)數(shù)據(jù)和指令進(jìn)行優(yōu)先級排序。
輔助存儲(chǔ)器(Secondary Memory)
所謂的輔助存儲(chǔ)器實(shí)際上就是計(jì)算機(jī)的外部存儲(chǔ)器,系統(tǒng)將應(yīng)用程序和數(shù)據(jù)保存在非易失性介質(zhì)上。CPU不能直接讀寫外存的數(shù)據(jù)。它向RAM發(fā)送一個(gè)包含特定存儲(chǔ)地址的讀/寫(或加載/存儲(chǔ))命令,存儲(chǔ)控制器接收命令并完成請求。
目前有許多不同類型的存儲(chǔ)介質(zhì),包括機(jī)械硬盤(HDD)、固態(tài)硬盤(SSD)、磁帶、指狀儲(chǔ)存器和光盤。磁帶在受監(jiān)管的行業(yè)中保持著在主動(dòng)歸檔存儲(chǔ)和高可用性存儲(chǔ)方面的使用價(jià)值。但是就目前來看,HDD和SSD是數(shù)據(jù)中心中最常見的存儲(chǔ)類型。
內(nèi)存和外存之間的關(guān)鍵區(qū)別
內(nèi)存:易失性;內(nèi)存包括RAM中的緩存和主內(nèi)存。它正式包括存儲(chǔ)器和輔助存儲(chǔ)器。與CPU非常接近的高性能數(shù)據(jù);SRAM比DRAM更貴;DRAM比外存更貴??缮壍?與外部存儲(chǔ)介質(zhì)相比,價(jià)格昂貴。存儲(chǔ)CPU指令:使用頻繁重復(fù)的指令進(jìn)行緩存以提高效率,主要用于將CPU指令與其他計(jì)算機(jī)設(shè)備和組件進(jìn)行通信。
外存:非易失性;盡管外存也是一種存儲(chǔ)類型,但它與緩存和主內(nèi)存不同,因?yàn)樗欠且资缘摹K俣容^慢,但能夠以更低的成本獲得更高的容量。可升級的;HDD成本在廣泛可接受的范圍內(nèi),而SSD的價(jià)格正在逐年降低,與HDD十分接近。
可存儲(chǔ)數(shù)據(jù),直到預(yù)定的數(shù)據(jù)被移動(dòng)或刪除。沒有電源的硬盤和磁帶將無限期地保存數(shù)據(jù)。無電源SSD可以保留數(shù)據(jù)長達(dá)兩年,但實(shí)際上這段時(shí)間要短得多。
堆內(nèi)內(nèi)存還是堆外內(nèi)存?
一般情況下,Java中分配的非空對象都是由Java虛擬機(jī)的垃圾收集器管理的,也稱為堆內(nèi)內(nèi)存(on-heap memory)。虛擬機(jī)會(huì)定期對垃圾內(nèi)存進(jìn)行回收,在某些特定的時(shí)間點(diǎn),它會(huì)進(jìn)行一次徹底的回收(full gc)。徹底回收時(shí),垃圾收集器會(huì)對所有分配的堆內(nèi)內(nèi)存進(jìn)行完整的掃描,這意味著一個(gè)重要的事實(shí)——這樣一次垃圾收集對Java應(yīng)用造成的影響,跟堆的大小是成正比的。過大的堆會(huì)影響Java應(yīng)用的性能。
對于這個(gè)問題,一種解決方案就是使用堆外內(nèi)存(off-heap memory)。堆外內(nèi)存意味著把內(nèi)存對象分配在Java虛擬機(jī)的堆以外的內(nèi)存,這些內(nèi)存直接受操作系統(tǒng)管理(而不是虛擬機(jī))。這樣做的結(jié)果就是能保持一個(gè)較小的堆,以減少垃圾收集對應(yīng)用的影響。
但是Java本身也在不斷對堆內(nèi)內(nèi)存的實(shí)現(xiàn)方式做改進(jìn)。兩者各有什么優(yōu)缺點(diǎn)?Vanilla Java博客作者Peter Lawrey撰寫了一篇文章,在文中他對三種方式:用new來分配對象、對象池(object pool)和堆外內(nèi)存,進(jìn)行了詳細(xì)的分析。
用new來分配對象內(nèi)存是最基本的一種方式,Lawery提到:
在Java 5.0之前,分配對象的代價(jià)很大,以至于大家都使用內(nèi)存池。但是從5.0開始,對象分配和垃圾回收變得快多了,研發(fā)人員發(fā)現(xiàn)了性能的提升,紛紛簡化他們的代碼,不再使用內(nèi)存池,而直接用new來分配對象。從5.0開始,只有一些分配代價(jià)較大的對象,比如線程、套接字和數(shù)據(jù)庫鏈接,用內(nèi)存池才會(huì)有明顯的性能提升。
對于內(nèi)存池,Lawery認(rèn)為它主要用于兩類對象。第一類是生命周期較短,且結(jié)構(gòu)簡單的對象,在內(nèi)存池中重復(fù)利用這些對象能增加CPU緩存的命中率,從而提高性能。第二種情況是加載含有大量重復(fù)對象的大片數(shù)據(jù),此時(shí)使用內(nèi)存池能減少垃圾回收的時(shí)間。對此,Lawery還以StringInterner為例進(jìn)行了說明。
最后Lawery分析了堆外內(nèi)存,它和內(nèi)存池一樣,也能縮短垃圾回收時(shí)間,但是它適用的對象和內(nèi)存池完全相反。內(nèi)存池往往適用于生命期較短的可變對象,而生命期中等或較長的對象,正是堆外內(nèi)存要解決的。堆外內(nèi)存有以下特點(diǎn):
1. 對于大內(nèi)存有良好的伸縮性
2. 對垃圾回收停頓的改善可以明顯感覺到
3. 在進(jìn)程間可以共享,減少虛擬機(jī)間的復(fù)制
4. Lawery還提到對外內(nèi)存最重要的還不是它能改進(jìn)性能,而是它的確定性。
當(dāng)然堆外內(nèi)存也有它自己的問題,最大的問題就是你的數(shù)據(jù)結(jié)構(gòu)變得不那么直觀,如果數(shù)據(jù)結(jié)構(gòu)比較復(fù)雜,就要對它進(jìn)行串行化(serialization),而串行化本身也會(huì)影響性能。另一個(gè)問題是由于你可以使用更大的內(nèi)存,你可能開始擔(dān)心虛擬內(nèi)存(即硬盤)的速度對你的影響了。
Lawery還介紹了OpenHFT公司提供三個(gè)開源庫:Chronicle Queue、Chronicle Map和Thread Affinity,這些庫可以幫助開發(fā)人員使用堆外內(nèi)存來保存數(shù)據(jù)。采用堆外內(nèi)存有很多好處,同時(shí)也帶來挑戰(zhàn),對堆外內(nèi)存感興趣的讀者可以閱讀Lawery的原文來了解更多信息。
內(nèi)存與外存關(guān)鍵區(qū)別知識(shí)科普相關(guān)文章: