• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      Java語(yǔ)言與C語(yǔ)言中垃圾回收的不同方式研究

      2021-03-08 09:47:22胡宇濤
      科學(xué)與財(cái)富 2021年6期
      關(guān)鍵詞:Java語(yǔ)言

      摘 要:計(jì)算機(jī)中的各項(xiàng)語(yǔ)言都具備特有的優(yōu)缺點(diǎn),其中Java語(yǔ)言屬于對(duì)象語(yǔ)言的范疇,而C語(yǔ)言屬于過(guò)程式語(yǔ)言。本文結(jié)合Java語(yǔ)言和C語(yǔ)言垃圾回收動(dòng)態(tài)存儲(chǔ)的基本特征,對(duì)它們不同的垃圾回收的方式進(jìn)行探究,明確Java語(yǔ)言回收和操作的機(jī)制,掌握C語(yǔ)言中產(chǎn)生垃圾的原因、回收的原理以及具體方式。

      關(guān)鍵詞:Java語(yǔ)言;C語(yǔ)言;垃圾回收

      引言:隨著信息技術(shù)的高速發(fā)展,為了進(jìn)一步提升計(jì)算機(jī)設(shè)備的運(yùn)行速率,及時(shí)清除垃圾信息,擴(kuò)大系統(tǒng)的存儲(chǔ)量,編程人員應(yīng)該合理地應(yīng)用編程語(yǔ)言。垃圾回收技術(shù)具有較強(qiáng)的使用價(jià)值,能在特定的算法中對(duì)資源進(jìn)行回收。不同的編程語(yǔ)言具有不同的垃圾回收模式,比如Java語(yǔ)言和C語(yǔ)言這兩者間就存在一定差異。

      一、Java語(yǔ)言中垃圾回收的方式

      (一)垃圾回收方式

      在Java語(yǔ)言可以使用垃圾回收器進(jìn)行垃圾處理,它的指針具有嚴(yán)格的構(gòu)建和應(yīng)用制度。Java語(yǔ)言是C++語(yǔ)言的進(jìn)一步優(yōu)化,它內(nèi)部結(jié)構(gòu)更加地簡(jiǎn)化,摒棄多重繼承體制中的要素。對(duì)垃圾回收器和垃圾收集進(jìn)行簡(jiǎn)單的探究?;厥掌鞑捎脛?dòng)態(tài)化運(yùn)作的模式,可以自動(dòng)解放內(nèi)存塊,并對(duì)其進(jìn)行壓縮。它是一個(gè)低層次的運(yùn)行線(xiàn),程序員的控制對(duì)它的運(yùn)行情況沒(méi)有明顯的影響。垃圾收集是一種自動(dòng)性操作,只能回收那些不被程序占用的部分。它只能在有需求的情況下進(jìn)行。

      (二)操作機(jī)制

      第一,跟蹤算法。這種算法的操作為以根部為出發(fā)點(diǎn)對(duì)系統(tǒng)進(jìn)行全方位的掃描和內(nèi)存塊識(shí)別,判斷其是否處于可達(dá)狀態(tài),如果發(fā)生環(huán)形引用的情況,數(shù)據(jù)的計(jì)數(shù)的數(shù)值一直無(wú)法達(dá)到0,這樣垃圾就不能被回收。在這種情況下,跟蹤算法能對(duì)指針指向的內(nèi)存塊進(jìn)行標(biāo)記,及時(shí)清除可以釋放的區(qū)塊,實(shí)現(xiàn)回收垃圾的目的。第二,復(fù)制算法。在最初的階段,把堆分為一個(gè)對(duì)象面和多個(gè)空閑面,程序在運(yùn)行中占據(jù)對(duì)象面的空間。利用這種方法可以把對(duì)象面的內(nèi)容復(fù)制到空閑面,及時(shí)程序的空間處于充滿(mǎn)的狀態(tài)也能進(jìn)行復(fù)制。這樣就能實(shí)現(xiàn)面與面的互換,但是不能對(duì)垃圾進(jìn)行回收[1]。復(fù)制算法在壓縮問(wèn)題中能發(fā)揮重要的作用,通過(guò)互換的模式,釋放對(duì)象面的空間。

      第三,分代算法。它是復(fù)制算法的進(jìn)一步優(yōu)化,能提升操作的效率,避免程序暫停時(shí)間過(guò)長(zhǎng)的問(wèn)題。分代算法在大部分程序中都能夠有效地應(yīng)用,能把堆分為多個(gè)組別。之后利用垃圾收集器把需要處理的內(nèi)存塊轉(zhuǎn)移到最高級(jí)別的子堆中,從而提升操作的效率。第四,引用計(jì)數(shù)算法。在內(nèi)存塊原有的基礎(chǔ)上新配置一個(gè)引用計(jì)數(shù),只要這新內(nèi)存塊被原有內(nèi)存塊和外面的指針引用時(shí),它的計(jì)數(shù)就增加一個(gè)數(shù)值。反之釋放一個(gè),數(shù)值就會(huì)減少一個(gè)。直到引用計(jì)數(shù)為0時(shí),就可以對(duì)這個(gè)內(nèi)存塊進(jìn)行回收。第五,壓縮算法。對(duì)所有內(nèi)存塊移到堆中進(jìn)行處理,把原來(lái)的區(qū)域變成空閑的位置,并及時(shí)進(jìn)行更新。第六,自適應(yīng)算法。它需要根據(jù)實(shí)際的情況,選用對(duì)應(yīng)的模式進(jìn)行垃圾處理操作。

      二、C語(yǔ)言中垃圾回收的方式

      C語(yǔ)言能夠與操作系統(tǒng)進(jìn)行直接地交互,不具備運(yùn)行時(shí)庫(kù)。因?yàn)檫\(yùn)行時(shí)庫(kù)能夠?qū)?nèi)存進(jìn)行壓縮,減少堆棧占據(jù)的空間。所以C語(yǔ)言要想壓縮空間就需要編程人員進(jìn)行直接操作。

      (一)垃圾產(chǎn)生的原因

      在C語(yǔ)言中,主要有三種內(nèi)存分配的模式。第一,在棧上構(gòu)建局部變量。比如,void func(int p1, int p2, int p3){int a = p1;int b =p2;int c =p3}。第二,靜態(tài)區(qū)域分配。比如,void swipe(int** p){int temp=999;*p=&temp;}。第三,動(dòng)態(tài)區(qū)域分配。在進(jìn)行分配時(shí),通過(guò)calloc進(jìn)行申請(qǐng),在free的作用下進(jìn)行釋放。這種方法相對(duì)與其它兩種模式更加方便,能夠在大型程序編寫(xiě)中發(fā)揮重要的內(nèi)存分配作用。但是它存在一定的使用風(fēng)險(xiǎn),即通過(guò)calloc進(jìn)行申請(qǐng)時(shí),其中的動(dòng)態(tài)內(nèi)存主要由另外的函數(shù)進(jìn)行使用,程序員在操作中經(jīng)常用free進(jìn)行內(nèi)存釋放,這就導(dǎo)致這部分內(nèi)容一直處于被分配的情況,增強(qiáng)系統(tǒng)內(nèi)部不足問(wèn)題發(fā)生的概率。此外在這種模式下,無(wú)法判定內(nèi)存泄露的具體位置。C語(yǔ)言中的這些內(nèi)存塊就是垃圾,在操作中需要應(yīng)用垃圾收集器,它具動(dòng)態(tài)存儲(chǔ)的功能,能把垃圾回收到空閑鏈接中。

      (二)回收的原理

      C語(yǔ)言垃圾回收的歷史最早起源于上世紀(jì)60年代的Lisp語(yǔ)言,這項(xiàng)語(yǔ)言主要依靠動(dòng)態(tài)分配進(jìn)行運(yùn)作在,語(yǔ)言都在堆上進(jìn)行分配。程序員需要掌握一種模式能對(duì)其進(jìn)行動(dòng)態(tài)監(jiān)管,這樣才能實(shí)現(xiàn)釋放內(nèi)存的目的,所以垃圾回收技術(shù)應(yīng)運(yùn)而生。C語(yǔ)言的垃圾回收模塊有三個(gè)運(yùn)行要求:不存在內(nèi)存泄露的問(wèn)題、可以及時(shí)回收沒(méi)有使用的內(nèi)存、可以對(duì)內(nèi)部進(jìn)行整理和縮減。在程序中已經(jīng)分配的內(nèi)存都有明確的指向,如果某一塊內(nèi)存不存在指向,這種情況就被稱(chēng)為內(nèi)存泄露,即處于不可達(dá)的狀態(tài)。當(dāng)程序處于任意狀態(tài)時(shí),靜態(tài)數(shù)據(jù)段、程序棧以及寄存器中指針的集合體被稱(chēng)為根集??蛇_(dá)主要以根集為指引,能找到指向它的指針,反之就是不可達(dá)[2]。

      垃圾回收器在運(yùn)行時(shí)先以根集為基礎(chǔ),根據(jù)指針?biāo)傅姆较蜻M(jìn)行掃描,當(dāng)找到可以存儲(chǔ)的空間后先進(jìn)行標(biāo)記。其次對(duì)整個(gè)內(nèi)存進(jìn)行掃描,再次進(jìn)行標(biāo)記操作。最后在完成掃描工作后,需要對(duì)所有的內(nèi)存塊進(jìn)行探究,如果有的內(nèi)部塊沒(méi)有被標(biāo)記,說(shuō)明它在鏈表中沒(méi)有發(fā)揮作用,可以進(jìn)行收回。

      (三)垃圾回收方式

      現(xiàn)階段,C語(yǔ)言中垃圾處理的主要模式為:標(biāo)記清除法以及引用計(jì)數(shù)法。第一,標(biāo)記清除法。這種清除模式起源于Lisp語(yǔ)言,主要分為兩個(gè)操作階段:空間標(biāo)記和垃圾清除。在進(jìn)行空間標(biāo)記時(shí),利用垃圾回收器對(duì)每個(gè)內(nèi)存塊進(jìn)行掃描,標(biāo)記引用的區(qū)域。在完成整體掃描之后,要對(duì)內(nèi)存集中的所有內(nèi)存進(jìn)行探究,回收沒(méi)有標(biāo)記的內(nèi)存塊。應(yīng)用標(biāo)記清除法的關(guān)鍵點(diǎn)在于應(yīng)該準(zhǔn)確標(biāo)記被引用的內(nèi)存塊。在進(jìn)行垃圾清除時(shí),被標(biāo)記的對(duì)象對(duì)稱(chēng)為可達(dá)對(duì)象,沒(méi)有被標(biāo)記的就是不可達(dá),即需要清除的垃圾。這時(shí)就需要按照次序釋放內(nèi)存塊中的內(nèi)存,對(duì)所有沒(méi)有標(biāo)記的進(jìn)行清除。第二,引用計(jì)數(shù)法。在內(nèi)存塊原有的基礎(chǔ)上新配置一個(gè)引用計(jì)數(shù),只要這新內(nèi)存塊被原有內(nèi)存塊和外面的指針引用時(shí),它的計(jì)數(shù)就增加一個(gè)數(shù)值,如果指針對(duì)其進(jìn)行釋放,它的計(jì)數(shù)就減少一個(gè)數(shù)值。當(dāng)它的計(jì)數(shù)數(shù)值為0時(shí),就需要清除這個(gè)內(nèi)存塊對(duì)其中的存儲(chǔ)空間進(jìn)行重新利用。當(dāng)這種方法需要配置兩個(gè)函數(shù)時(shí),可以同時(shí)進(jìn)行增加和減少計(jì)數(shù)的操作,數(shù)值為0時(shí)進(jìn)行內(nèi)存釋放。

      引用計(jì)數(shù)法在應(yīng)用時(shí)不會(huì)干擾程序的運(yùn)行,并且具有較好的局部性。但是存在環(huán)形引用的情況,并且在釋放存儲(chǔ)空間時(shí),需要計(jì)算引用的數(shù)值。標(biāo)記清除法不涉及環(huán)形引用的問(wèn)題,并且引用計(jì)數(shù)的效率較高。但是在操作中需要暫停程序,存在一定的時(shí)間損耗。

      結(jié)論:綜上所述,Java語(yǔ)言和C語(yǔ)言它們具有不同的垃圾回收模式,但是無(wú)論在哪一種語(yǔ)言中,垃圾處理工作都發(fā)揮著不可或缺的作用。所以在進(jìn)行編程學(xué)習(xí)時(shí),特別是在入門(mén)的階段更需要培養(yǎng)釋放函數(shù)的習(xí)慣,保障每次使用后都能釋放內(nèi)存,這樣既能提升空間的利用率,又能保障系統(tǒng)的運(yùn)轉(zhuǎn)效果。

      參考文獻(xiàn):

      [1]楊明.C語(yǔ)言與匯編語(yǔ)言相結(jié)合實(shí)現(xiàn)STM32F107單片機(jī)復(fù)位方法研究[J].建井技術(shù),2020,41(01):44-46.

      [2]沈逸飛,任春龍,胡云飛,等.淺析C語(yǔ)言、Java、Python的數(shù)組合并方法[J].電腦知識(shí)與技術(shù),2020,16(03):78-82.

      作者簡(jiǎn)介:

      胡宇濤,男,民族:漢,出生年月1999-03-20,籍貫:湖南郴州, 學(xué)歷:本科,研究方向:軟件工程(java、前端、C語(yǔ)言)

      猜你喜歡
      Java語(yǔ)言
      Java語(yǔ)言圖形編程工具的設(shè)計(jì)及應(yīng)用
      科技傳播(2017年4期)2017-04-24 20:20:00
      高職《Java語(yǔ)言程序設(shè)計(jì)》課程的“微課”制作與應(yīng)用研究
      論開(kāi)閉原則在JAVA程序設(shè)計(jì)中的應(yīng)用
      基于A(yíng)ndroid平臺(tái)的健康醫(yī)療APP設(shè)計(jì)與開(kāi)發(fā)
      大學(xué)生創(chuàng)業(yè)平臺(tái)設(shè)計(jì)與實(shí)現(xiàn)
      計(jì)算機(jī)軟件開(kāi)發(fā)中的JAVA編程語(yǔ)言分析
      用戶(hù)隱私保護(hù)之手機(jī)密碼保險(xiǎn)箱
      異常結(jié)構(gòu)對(duì)Java程序分析的影響
      Android手機(jī)三軸加速度傳感器使用
      科技資訊(2015年8期)2015-07-02 18:44:39
      基于Java語(yǔ)言的手機(jī)軟件開(kāi)發(fā)技術(shù)分析
      嘉峪关市| 邯郸县| 永定县| 墨竹工卡县| 四平市| 靖西县| 太仓市| 酉阳| 黔西县| 夏河县| 南昌县| 宁德市| 黄平县| 普安县| 当涂县| 静安区| 武邑县| 赤壁市| 新密市| 明溪县| 襄汾县| 波密县| 丹棱县| 五指山市| 武城县| 会同县| 牙克石市| 永吉县| 海宁市| 沁源县| 乌拉特中旗| 河池市| 宿迁市| 锦州市| 恩施市| 逊克县| 北川| 江达县| 友谊县| 张家港市| 株洲市|